)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"9871d2c8429bd993526163aaf7ee303c4443dae5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add UniqueConstraint for quota usages table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, quota usages table dosen\u0027t contain any"},{"line_number":10,"context_line":"UniqueConstraint, under extreme circurmstances such"},{"line_number":11,"context_line":"as launching over 300 instances for a new project(user)"},{"line_number":12,"context_line":"simultaneously, there are chances that multiple records"},{"line_number":13,"context_line":"for same resourse for same user can be created. Adding"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a4dcd0f_7966f02a","line":10,"updated":"2015-08-14 03:08:13.000000000","message":"s/circurmstances/circumstances","commit_id":"1f2f9a3ebb78db5869e87e06be7c3a360e392f50"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"af1d66aaa7c57a40913aae717f5d159fe088d0b3","unresolved":false,"context_lines":[{"line_number":3524,"context_line":"            LOG.warn(_LW(\"DBDuplicateEntry detected\"))"},{"line_number":3525,"context_line":"            return f(*args, **kwargs)"},{"line_number":3526,"context_line":"    functools.update_wrapper(wrapped, f)"},{"line_number":3527,"context_line":"    return wrapped"},{"line_number":3528,"context_line":""},{"line_number":3529,"context_line":""},{"line_number":3530,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_72ba7573","line":3527,"updated":"2015-08-14 12:25:54.000000000","message":"sorry I am misread the commit msg\nseems unique constraint is added to prevent duplication\nwhy we add this handling again?","commit_id":"2b1225a32c712530dc5de58bd772fb38271b0936"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"800eb3ed024be6118325017acedf10c0835171f3","unresolved":false,"context_lines":[{"line_number":3524,"context_line":"            LOG.warn(_LW(\"DBDuplicateEntry detected\"))"},{"line_number":3525,"context_line":"            return f(*args, **kwargs)"},{"line_number":3526,"context_line":"    functools.update_wrapper(wrapped, f)"},{"line_number":3527,"context_line":"    return wrapped"},{"line_number":3528,"context_line":""},{"line_number":3529,"context_line":""},{"line_number":3530,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_8558188c","line":3527,"in_reply_to":"1a4dcd0f_71691225","updated":"2015-08-14 14:26:20.000000000","message":"I don\u0027t know :)\nat least If you think it\u0027s really needed you can use another patch \nthen more discussion can be done on 2nd patch ~ thanks","commit_id":"2b1225a32c712530dc5de58bd772fb38271b0936"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"fd91ae1fb975e4f83da48d59e59f4c1c6447a0e3","unresolved":false,"context_lines":[{"line_number":3524,"context_line":"            LOG.warn(_LW(\"DBDuplicateEntry detected\"))"},{"line_number":3525,"context_line":"            return f(*args, **kwargs)"},{"line_number":3526,"context_line":"    functools.update_wrapper(wrapped, f)"},{"line_number":3527,"context_line":"    return wrapped"},{"line_number":3528,"context_line":""},{"line_number":3529,"context_line":""},{"line_number":3530,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_71691225","line":3527,"in_reply_to":"1a4dcd0f_72ba7573","updated":"2015-08-14 13:10:16.000000000","message":"HI, thanks for your review, as for the function  _create_quota_usage_if_missing the create_quota_usage will be called if there are no record yet been created, so this bug only happens if we have an empty table. Take launching instance as an example, two instances are creating at the same time for an new user, this bug might happen,  say, instance A sucessfully created one record then the instance B will go through this retry process and as there is already a record created by instance A so it will not create a new record. This is just to guarranty the success of instance creation when large number of instances are created at the same time. But this is just an additional thing, I\u0027m ok to remove this.","commit_id":"2b1225a32c712530dc5de58bd772fb38271b0936"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"636c1016f14e428f1e88a2ff05d9c6f63564ce0b","unresolved":false,"context_lines":[{"line_number":3543,"context_line":"                                                     project_id,"},{"line_number":3544,"context_line":"                                                     user_id, session)"},{"line_number":3545,"context_line":"            refresh \u003d created or _is_quota_refresh_needed("},{"line_number":3546,"context_line":"                                            user_usages[resource], max_age)"},{"line_number":3547,"context_line":"            # OK, refresh the usage"},{"line_number":3548,"context_line":"            if refresh:"},{"line_number":3549,"context_line":"                # Grab the sync routine"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_0e379f4d","line":3546,"updated":"2015-08-21 06:42:21.000000000","message":"Why you change this file, I can\u0027t find any related modification except reformat?\n\nIf you only want to fix the code format, I suggest to use a separate patch in order to avoid clarifying it.","commit_id":"9bed5e3d82accc232921d53bb4df4e545e735f42"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"c535037069f9d354e3694db00ab3ea9e3d324c01","unresolved":false,"context_lines":[{"line_number":3542,"context_line":"                                                     until_refresh, project_id,"},{"line_number":3543,"context_line":"                                                     user_id, session)"},{"line_number":3544,"context_line":"            refresh \u003d created or _is_quota_refresh_needed("},{"line_number":3545,"context_line":"                                        user_usages[resource], max_age)"},{"line_number":3546,"context_line":"            # OK, refresh the usage"},{"line_number":3547,"context_line":"            if refresh:"},{"line_number":3548,"context_line":"                # Grab the sync routine"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_bb0ac588","line":3545,"updated":"2015-08-25 19:06:30.000000000","message":"typo: remove this unrelated change","commit_id":"f8fe49d5e906faecdf0d2ae7b4337cb871d9d1c2"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"013d6297345876a5c775237ce10f8754303f9406","unresolved":false,"context_lines":[{"line_number":3542,"context_line":"                                                     until_refresh, project_id,"},{"line_number":3543,"context_line":"                                                     user_id, session)"},{"line_number":3544,"context_line":"            refresh \u003d created or _is_quota_refresh_needed("},{"line_number":3545,"context_line":"                                        user_usages[resource], max_age)"},{"line_number":3546,"context_line":"            # OK, refresh the usage"},{"line_number":3547,"context_line":"            if refresh:"},{"line_number":3548,"context_line":"                # Grab the sync routine"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_64a23dfe","line":3545,"in_reply_to":"fa1b9901_bb0ac588","updated":"2015-08-26 01:21:50.000000000","message":"...I didn\u0027t notice this","commit_id":"f8fe49d5e906faecdf0d2ae7b4337cb871d9d1c2"}],"nova/db/sqlalchemy/migrate_repo/versions/300_add_unique_constraint_for_quota_usages.py":[{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"636c1016f14e428f1e88a2ff05d9c6f63564ce0b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) Intel Corporation."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_3102060b","line":1,"updated":"2015-08-21 06:42:21.000000000","message":"s/Intel/Huawei/","commit_id":"9bed5e3d82accc232921d53bb4df4e545e735f42"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b0783e14e84ce7bb1c3b15368d4ae7f35254471c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        \"user_id\", \"project_id\", \"resource\", \"deleted\","},{"line_number":28,"context_line":"        table\u003dquota_usages,"},{"line_number":29,"context_line":"        name\u003d\"uniq_quota_usages0user_id0project_id0resource0deleted\")"},{"line_number":30,"context_line":"    ukey.create()"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_e30d073f","line":30,"updated":"2015-08-28 16:03:19.000000000","message":"I\u0027m concerned about what happens if people have raced this way in the past and have dirty db. How would they recover, as this migration will fail.","commit_id":"59a8b045813cf01166519607a8a4f7a542975073"}],"nova/db/sqlalchemy/migrate_repo/versions/301_add_unique_constraint_for_quota_usages.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1f82a5c009b441a0574f07de004e2a38f2974f5e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    try:"},{"line_number":36,"context_line":"        ukey.create()"},{"line_number":37,"context_line":"    except Exception:"},{"line_number":38,"context_line":"        LOG.exception(_LE(\u0027Exception while creating UniqueConstraint, \u0027"},{"line_number":39,"context_line":"                          \u0027Please check and clean your DB.\u0027))"},{"line_number":40,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"da20952f_82ef121d","line":38,"updated":"2015-08-31 17:27:41.000000000","message":"This still kills an upgrade so it\u0027s not much better.\n\nIt should be possible to get the results of a query where you check for rows that have the same user_id/project_id/resource/delete values and then delete one of them.\n\nMaybe Mike Bayer (zzzeek) has ideas on how to do this efficiently with sqlalchemy.","commit_id":"565629ff2118fdba975c3f902af73a97018242fd"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f904098fad6645016566ee21a1c52fa716891d4e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    try:"},{"line_number":36,"context_line":"        ukey.create()"},{"line_number":37,"context_line":"    except Exception:"},{"line_number":38,"context_line":"        LOG.exception(_LE(\u0027Exception while creating UniqueConstraint, \u0027"},{"line_number":39,"context_line":"                          \u0027Please check and clean your DB.\u0027))"},{"line_number":40,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"da20952f_b08cd2da","line":38,"in_reply_to":"da20952f_82ef121d","updated":"2015-09-01 01:15:55.000000000","message":"Hi, Thanks for your comments, I have thought about this before, but I have concerns that is it appropriate to delete an existing row in database automatically without letting the user to know about it, and how are we judging on which ones to delete if we have multiple records, maybe we should let the users to decide on it?","commit_id":"565629ff2118fdba975c3f902af73a97018242fd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1f1cd8a2f927c602afaac4d3d843e12e86e6f8ae","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    try:"},{"line_number":36,"context_line":"        ukey.create()"},{"line_number":37,"context_line":"    except Exception:"},{"line_number":38,"context_line":"        LOG.exception(_LE(\u0027Exception while creating UniqueConstraint, \u0027"},{"line_number":39,"context_line":"                          \u0027Please check and clean your DB.\u0027))"},{"line_number":40,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"da20952f_c28d0ad4","line":38,"in_reply_to":"da20952f_82ef121d","updated":"2015-08-31 17:44:21.000000000","message":"This is what zzzeek gave as an example of doing this type of query with sqlalchemy:\n\n(12:38:46 PM) zzzeek: mriedem:  a core SELECT looks like stmt \u003d select([func.count(‘*’)]).group_by(MyModel.x, MyModel.y).having(func.count(‘*’) \u003e 1);   if connection.scalar(stmt): boom\n\nI guess rather than the \u0027boom\u0027 part, you\u0027d have logic that removes duplicates.","commit_id":"565629ff2118fdba975c3f902af73a97018242fd"}],"nova/db/sqlalchemy/migrate_repo/versions/302_add_unique_constraint_for_quota_usages.py":[{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"8edbb6fbbf11f0d055ea9487f993986e46b64395","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        if key in dupes:"},{"line_number":66,"context_line":"            s.delete(quota_obj)"},{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            dupes.add(key)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba15a1d1_adaa1584","line":68,"updated":"2015-09-12 19:53:30.000000000","message":"you are missing session.commit().","commit_id":"179639fa01759d0110521c990ed9a30e8855b59f"}],"nova/db/sqlalchemy/migrate_repo/versions/303_add_unique_constraint_for_quota_usages.py":[{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"8c4d282124c7099d39882994a960e762783a0b50","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # Before upgrade DB, we must ensure there is no multiple records"},{"line_number":31,"context_line":"    # for same resource for same project."},{"line_number":32,"context_line":"    quota_usages_list \u003d list(quota_usages.select().execute())"},{"line_number":33,"context_line":"    for quota_usage in quota_usages_list:"},{"line_number":34,"context_line":"        dupl \u003d quota_usages.select().where(and_(quota_usages.columns.user_id"},{"line_number":35,"context_line":"                                                \u003d\u003d quota_usages.user_id,"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba15a1d1_2de7e541","line":32,"updated":"2015-09-12 19:18:57.000000000","message":"this approach is extremely inefficient.  what was the problem with the example I gave ?","commit_id":"6307c8edacee6c614d5620376b63477d8103de5e"}],"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2777712a527beb6b92f9e63ac9bbae2eba3bbc67","unresolved":false,"context_lines":[{"line_number":472,"context_line":"    \"\"\"Represents the current usage for a given resource.\"\"\""},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    __tablename__ \u003d \u0027quota_usages\u0027"},{"line_number":475,"context_line":"    uniq_name \u003d \"uniq_user_quotas0user_id0project_id0resource0deleted\""},{"line_number":476,"context_line":"    __table_args__ \u003d ("},{"line_number":477,"context_line":"        schema.UniqueConstraint(\"user_id\", \"project_id\", \"resource\", \"deleted\","},{"line_number":478,"context_line":"                                name\u003duniq_name),"}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_8eb1f491","line":475,"updated":"2015-08-28 02:51:00.000000000","message":"The naming convention is:\n\nuniq_\u003ctablename\u003e@column1@column2...@columnN\n\nSo you should name this:\n\nuniq_quota_usages@user_id@project_id@resource_deleted","commit_id":"0a385d5bcae637331c7f44e1471e083a344cfbac"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"af1d66aaa7c57a40913aae717f5d159fe088d0b3","unresolved":false,"context_lines":[{"line_number":6625,"context_line":"                            _reservation_get, self.ctxt, r)"},{"line_number":6626,"context_line":""},{"line_number":6627,"context_line":"    def test_quota_usage_create_duplicated(self):"},{"line_number":6628,"context_line":"        new_usage \u003d sqlalchemy_api._quota_usage_create(\u0027project_id\u0027, \u0027user_id\u0027,"},{"line_number":6629,"context_line":"                                                       \u0027resource\u0027, 0, 0, None,"},{"line_number":6630,"context_line":"                                                       session\u003dNone)"},{"line_number":6631,"context_line":"        self.assertRaises(db_exc.DBDuplicateEntry,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_525df977","line":6628,"updated":"2015-08-14 12:25:54.000000000","message":"the variable is not needed","commit_id":"2b1225a32c712530dc5de58bd772fb38271b0936"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"636c1016f14e428f1e88a2ff05d9c6f63564ce0b","unresolved":false,"context_lines":[{"line_number":6627,"context_line":"    def test_quota_usage_create_duplicated(self):"},{"line_number":6628,"context_line":"        sqlalchemy_api._quota_usage_create(\u0027project_id\u0027, \u0027user_id\u0027,"},{"line_number":6629,"context_line":"                                           \u0027resource\u0027, 0, 0, None,"},{"line_number":6630,"context_line":"                                           session\u003dNone)"},{"line_number":6631,"context_line":"        self.assertRaises(db_exc.DBDuplicateEntry,"},{"line_number":6632,"context_line":"                          sqlalchemy_api._quota_usage_create, \u0027project_id\u0027,"},{"line_number":6633,"context_line":"                          \u0027user_id\u0027, \u0027resource\u0027, 0, 0, None, session\u003dNone)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_51321aa8","line":6630,"updated":"2015-08-21 06:42:21.000000000","message":"the default value of \u0027session\u0027 is None, so I think we don\u0027t need to pass \u0027session\u003dNone\u0027 into the method.","commit_id":"9bed5e3d82accc232921d53bb4df4e545e735f42"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"636c1016f14e428f1e88a2ff05d9c6f63564ce0b","unresolved":false,"context_lines":[{"line_number":6630,"context_line":"                                           session\u003dNone)"},{"line_number":6631,"context_line":"        self.assertRaises(db_exc.DBDuplicateEntry,"},{"line_number":6632,"context_line":"                          sqlalchemy_api._quota_usage_create, \u0027project_id\u0027,"},{"line_number":6633,"context_line":"                          \u0027user_id\u0027, \u0027resource\u0027, 0, 0, None, session\u003dNone)"},{"line_number":6634,"context_line":""},{"line_number":6635,"context_line":"    # Test case that shows the added UniqueConstraint won\u0027t affect deleted"},{"line_number":6636,"context_line":"    # rows."}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_71195e21","line":6633,"updated":"2015-08-21 06:42:21.000000000","message":"here","commit_id":"9bed5e3d82accc232921d53bb4df4e545e735f42"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"636c1016f14e428f1e88a2ff05d9c6f63564ce0b","unresolved":false,"context_lines":[{"line_number":6637,"context_line":"    def test_quota_usage_delete_duplicated_no_error(self):"},{"line_number":6638,"context_line":"        sqlalchemy_api._quota_usage_create(\u0027project_id\u0027, \u0027user_id\u0027,"},{"line_number":6639,"context_line":"                                           \u0027resource\u0027, 0, 0, None,"},{"line_number":6640,"context_line":"                                           session\u003dNone)"},{"line_number":6641,"context_line":"        db.quota_destroy_all_by_project_and_user(self.ctxt, \u0027project_id\u0027,"},{"line_number":6642,"context_line":"                                                 \u0027user_id\u0027)"},{"line_number":6643,"context_line":"        sqlalchemy_api._quota_usage_create(\u0027project_id\u0027, \u0027user_id\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_11dfc23a","line":6640,"updated":"2015-08-21 06:42:21.000000000","message":"here","commit_id":"9bed5e3d82accc232921d53bb4df4e545e735f42"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"636c1016f14e428f1e88a2ff05d9c6f63564ce0b","unresolved":false,"context_lines":[{"line_number":6642,"context_line":"                                                 \u0027user_id\u0027)"},{"line_number":6643,"context_line":"        sqlalchemy_api._quota_usage_create(\u0027project_id\u0027, \u0027user_id\u0027,"},{"line_number":6644,"context_line":"                                           \u0027resource\u0027, 0, 0, None,"},{"line_number":6645,"context_line":"                                           session\u003dNone)"},{"line_number":6646,"context_line":"        db.quota_destroy_all_by_project_and_user(self.ctxt, \u0027project_id\u0027,"},{"line_number":6647,"context_line":"                                                 \u0027user_id\u0027)"},{"line_number":6648,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_31bd26d8","line":6645,"updated":"2015-08-21 06:42:21.000000000","message":"here","commit_id":"9bed5e3d82accc232921d53bb4df4e545e735f42"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"636c1016f14e428f1e88a2ff05d9c6f63564ce0b","unresolved":false,"context_lines":[{"line_number":6644,"context_line":"                                           \u0027resource\u0027, 0, 0, None,"},{"line_number":6645,"context_line":"                                           session\u003dNone)"},{"line_number":6646,"context_line":"        db.quota_destroy_all_by_project_and_user(self.ctxt, \u0027project_id\u0027,"},{"line_number":6647,"context_line":"                                                 \u0027user_id\u0027)"},{"line_number":6648,"context_line":""},{"line_number":6649,"context_line":"    def test_quota_usage_get_nonexistent(self):"},{"line_number":6650,"context_line":"        self.assertRaises(exception.QuotaUsageNotFound, db.quota_usage_get,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_f1332e60","line":6647,"updated":"2015-08-21 06:42:21.000000000","message":"I suggest we add a try...except block at here, like this:\n\n    try:\n        db.quota_destroy_all_by_project_and_user()\n    except db_exc.DBDuplicateEntry:\n        self.fail(\"DBDuplicateEntry exception shouldn\u0027t be raised\")","commit_id":"9bed5e3d82accc232921d53bb4df4e545e735f42"}],"nova/tests/unit/db/test_migrations.py":[{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"4140cc7d6fdfcdf09976f842ccf4504fd643037b","unresolved":false,"context_lines":[{"line_number":766,"context_line":"        # the point-of-view of unit tests, since they use SQLite"},{"line_number":767,"context_line":"        pass"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"    def _check_300(self, engine, data):"},{"line_number":770,"context_line":"        inspector \u003d reflection.Inspector.from_engine(engine)"},{"line_number":771,"context_line":"        constraints \u003d inspector.get_unique_constraints(\u0027quota_usages\u0027)"},{"line_number":772,"context_line":"        constraint_names \u003d [constraint[\u0027name\u0027] for constraint in constraints]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_f907601b","line":769,"updated":"2015-08-14 03:09:27.000000000","message":"Why you skip the 299 script?","commit_id":"1f2f9a3ebb78db5869e87e06be7c3a360e392f50"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"ea1fc249faf6fa91d9719effcd9e6d9c05494221","unresolved":false,"context_lines":[{"line_number":766,"context_line":"        # the point-of-view of unit tests, since they use SQLite"},{"line_number":767,"context_line":"        pass"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"    def _check_300(self, engine, data):"},{"line_number":770,"context_line":"        inspector \u003d reflection.Inspector.from_engine(engine)"},{"line_number":771,"context_line":"        constraints \u003d inspector.get_unique_constraints(\u0027quota_usages\u0027)"},{"line_number":772,"context_line":"        constraint_names \u003d [constraint[\u0027name\u0027] for constraint in constraints]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_ecaa40d2","line":769,"in_reply_to":"1a4dcd0f_cc118455","updated":"2015-08-14 03:16:52.000000000","message":"Oh, Now I saw that already have a 299 script. (https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/migrate_repo/versions/299_service_version_number.py)\n\n You\u0027re right. sorry about that!","commit_id":"1f2f9a3ebb78db5869e87e06be7c3a360e392f50"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ad3fb7a156faa75cb95838bbb731c107efeb4ecc","unresolved":false,"context_lines":[{"line_number":766,"context_line":"        # the point-of-view of unit tests, since they use SQLite"},{"line_number":767,"context_line":"        pass"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"    def _check_300(self, engine, data):"},{"line_number":770,"context_line":"        inspector \u003d reflection.Inspector.from_engine(engine)"},{"line_number":771,"context_line":"        constraints \u003d inspector.get_unique_constraints(\u0027quota_usages\u0027)"},{"line_number":772,"context_line":"        constraint_names \u003d [constraint[\u0027name\u0027] for constraint in constraints]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_cc118455","line":769,"in_reply_to":"1a4dcd0f_f907601b","updated":"2015-08-14 03:11:15.000000000","message":"I thought this number should be same as my update script number.","commit_id":"1f2f9a3ebb78db5869e87e06be7c3a360e392f50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2777712a527beb6b92f9e63ac9bbae2eba3bbc67","unresolved":false,"context_lines":[{"line_number":766,"context_line":"        # the point-of-view of unit tests, since they use SQLite"},{"line_number":767,"context_line":"        pass"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"    def _check_300(self, engine, data):"},{"line_number":770,"context_line":"        inspector \u003d reflection.Inspector.from_engine(engine)"},{"line_number":771,"context_line":"        constraints \u003d inspector.get_unique_constraints(\u0027quota_usages\u0027)"},{"line_number":772,"context_line":"        constraint_names \u003d [constraint[\u0027name\u0027] for constraint in constraints]"}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_ce44cc75","line":769,"updated":"2015-08-28 02:51:00.000000000","message":"Move this after _check_299, I was really confused here thinking you had skipped a migration.","commit_id":"0a385d5bcae637331c7f44e1471e083a344cfbac"}]}
