)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"53d700405d279b981316d382f37210189f299ba2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"this stuff a bit cleaner and more evident: an update_database() method"},{"line_number":26,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":27,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":28,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":29,"context_line":"db_api leads to circual import problems."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This is marked as WIP because this is a bit different from how things"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"df7087c5_ad334c62","line":28,"range":{"start_line":28,"start_character":15,"end_line":28,"end_character":20},"updated":"2018-03-19 21:25:59.000000000","message":"it is an ?","commit_id":"b92d4ca56445286649401094f2742331594eff7b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"53d700405d279b981316d382f37210189f299ba2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":27,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":28,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":29,"context_line":"db_api leads to circual import problems."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This is marked as WIP because this is a bit different from how things"},{"line_number":32,"context_line":"have been done in the past so I want to be sure that we have a chat"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"df7087c5_8d3a0832","line":29,"range":{"start_line":29,"start_character":16,"end_line":29,"end_character":23},"updated":"2018-03-19 21:25:59.000000000","message":"circular","commit_id":"b92d4ca56445286649401094f2742331594eff7b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dc270d11495892bc28bada3b32e52b5d3dae5e53","unresolved":false,"context_lines":[{"line_number":26,"context_line":"this stuff a bit cleaner and more evident: an update_database() method"},{"line_number":27,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":28,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":29,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":30,"context_line":"db_api leads to circual import problems."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"blueprint placement-extract"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"5f7c97a3_3ff6275f","line":29,"range":{"start_line":29,"start_character":15,"end_line":29,"end_character":20},"updated":"2018-06-08 20:03:04.000000000","message":"it is an?","commit_id":"58a29bc10c900b6a0fb186304c8e25d0ad8ff039"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dc270d11495892bc28bada3b32e52b5d3dae5e53","unresolved":false,"context_lines":[{"line_number":27,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":28,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":29,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":30,"context_line":"db_api leads to circual import problems."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"blueprint placement-extract"},{"line_number":33,"context_line":"Closes-Bug: #1756151"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"5f7c97a3_7f001f35","line":30,"range":{"start_line":30,"start_character":16,"end_line":30,"end_character":23},"updated":"2018-06-08 20:03:04.000000000","message":"circular","commit_id":"58a29bc10c900b6a0fb186304c8e25d0ad8ff039"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9496050af924a5780aa7c6d33db5f26c48d9c980","unresolved":false,"context_lines":[{"line_number":26,"context_line":"this stuff a bit cleaner and more evident: an update_database() method"},{"line_number":27,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":28,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":29,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":30,"context_line":"db_api leads to circual import problems."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"blueprint placement-extract"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"5f7c97a3_e6cec381","line":29,"range":{"start_line":29,"start_character":14,"end_line":29,"end_character":21},"updated":"2018-06-11 17:33:00.000000000","message":"it is an","commit_id":"102ed3cb20d9b3be49e540e308c11edabafd7298"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9496050af924a5780aa7c6d33db5f26c48d9c980","unresolved":false,"context_lines":[{"line_number":27,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":28,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":29,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":30,"context_line":"db_api leads to circual import problems."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"blueprint placement-extract"},{"line_number":33,"context_line":"Closes-Bug: #1756151"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"5f7c97a3_a6c44b61","line":30,"range":{"start_line":30,"start_character":16,"end_line":30,"end_character":23},"updated":"2018-06-11 17:33:00.000000000","message":"circular","commit_id":"102ed3cb20d9b3be49e540e308c11edabafd7298"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"44ffc6199fb9da7e5d4b9d80a6f2f99667b24788","unresolved":false,"context_lines":[{"line_number":26,"context_line":"this stuff a bit cleaner and more evident: an update_database() method"},{"line_number":27,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":28,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":29,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":30,"context_line":"db_api leads to circual import problems."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"blueprint placement-extract"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"5f7c97a3_8a19f27a","line":29,"range":{"start_line":29,"start_character":15,"end_line":29,"end_character":20},"updated":"2018-06-12 19:12:19.000000000","message":"it is an","commit_id":"7c90ad227900be8b7a0f3a836af6cdf533661c5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"44ffc6199fb9da7e5d4b9d80a6f2f99667b24788","unresolved":false,"context_lines":[{"line_number":27,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":28,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":29,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":30,"context_line":"db_api leads to circual import problems."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"blueprint placement-extract"},{"line_number":33,"context_line":"Closes-Bug: #1756151"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"5f7c97a3_aa14ee41","line":30,"range":{"start_line":30,"start_character":16,"end_line":30,"end_character":23},"updated":"2018-06-12 19:12:19.000000000","message":"circular","commit_id":"7c90ad227900be8b7a0f3a836af6cdf533661c5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a493bb8deb2464363aeb358516814c5557c20d9a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"this stuff a bit cleaner and more evident: an update_database() method"},{"line_number":27,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":28,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":29,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":30,"context_line":"db_api leads to circual import problems."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"blueprint placement-extract"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"5f7c97a3_0a6da798","line":29,"range":{"start_line":29,"start_character":15,"end_line":29,"end_character":20},"updated":"2018-06-14 21:21:23.000000000","message":"it is an","commit_id":"8d6cb2a8ba6d61c7000dff86ee1495b2f0c7de17"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c3964a40496f187e81de367a7169449f4f747ce0","unresolved":false,"context_lines":[{"line_number":26,"context_line":"this stuff a bit cleaner and more evident: an update_database() method"},{"line_number":27,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":28,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":29,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":30,"context_line":"db_api leads to circual import problems."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"blueprint placement-extract"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"5f7c97a3_173dc6bb","line":29,"range":{"start_line":29,"start_character":15,"end_line":29,"end_character":20},"in_reply_to":"5f7c97a3_0a6da798","updated":"2018-06-15 10:25:42.000000000","message":"go me!","commit_id":"8d6cb2a8ba6d61c7000dff86ee1495b2f0c7de17"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a493bb8deb2464363aeb358516814c5557c20d9a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"in deploy uses an empty DbContext class from db_api to the call the"},{"line_number":28,"context_line":"ensure_trait_sync method in resource_provider. update_database is in"},{"line_number":29,"context_line":"deploy because it an app deployment task and because putting it in"},{"line_number":30,"context_line":"db_api leads to circual import problems."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"blueprint placement-extract"},{"line_number":33,"context_line":"Closes-Bug: #1756151"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"5f7c97a3_aa69138d","line":30,"range":{"start_line":30,"start_character":16,"end_line":30,"end_character":23},"updated":"2018-06-14 21:21:23.000000000","message":"circular","commit_id":"8d6cb2a8ba6d61c7000dff86ee1495b2f0c7de17"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fbe70bed06853b68a3a63e36db5dec5363dcbada","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This change moves the syncing into the the deploy.load_app() handling."},{"line_number":14,"context_line":"This means that the syncing will be attempted any time a new WSGI"},{"line_number":15,"context_line":"application is created. Most of the time this will be at the start of a"},{"line_number":16,"context_line":"new process, but some WSGI servers have interesting threading models so"},{"line_number":17,"context_line":"there\u0027s a (slim) possibility that it could be in a thread. Because of"},{"line_number":18,"context_line":"this latter possibility, the locking is still in place."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"5f7c97a3_4ea5809e","line":15,"range":{"start_line":15,"start_character":61,"end_line":15,"end_character":66},"updated":"2018-06-20 16:29:20.000000000","message":"Maybe a silly question, but does that include reload?","commit_id":"0372d82c2c5ae5651b00c5ab9e1cf5c77a8f87d9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"9d1f0a8e15dfe30840b106e30b071d158964adc5","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This change moves the syncing into the the deploy.load_app() handling."},{"line_number":14,"context_line":"This means that the syncing will be attempted any time a new WSGI"},{"line_number":15,"context_line":"application is created. Most of the time this will be at the start of a"},{"line_number":16,"context_line":"new process, but some WSGI servers have interesting threading models so"},{"line_number":17,"context_line":"there\u0027s a (slim) possibility that it could be in a thread. Because of"},{"line_number":18,"context_line":"this latter possibility, the locking is still in place."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"5f7c97a3_ee600c10","line":15,"range":{"start_line":15,"start_character":61,"end_line":15,"end_character":66},"in_reply_to":"5f7c97a3_4ea5809e","updated":"2018-06-20 16:38:48.000000000","message":"It depends on how the web server is managing its wsgi apps. Some of them, when you tell them to HUP, will retire the wsgi-related processes completely. Others will do what amounts to a reset of the python environment and reload the code into the same process.\n\nWhich is why I added the \"but some\".\n\nOn top of all that is the fact that as a web server chooses to scale itself you get yet more processes, and they\u0027ll try to do the sync too.\n\nBut that\u0027s still better than trying it with every request, which is what this change is trying to avoid. We\u0027ve really only got two choices: try it on every request, or try it on every app creation.\n\nThe ambiguity about what app creation is (because of different wsgi servers) doesn\u0027t really matter all that much.\n\nI feel like I\u0027m waving my hands here without really saying much, so I\u0027ll just stop.","commit_id":"0372d82c2c5ae5651b00c5ab9e1cf5c77a8f87d9"}],"nova/api/openstack/placement/deploy.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fbe70bed06853b68a3a63e36db5dec5363dcbada","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def update_database():"},{"line_number":88,"context_line":"    \"\"\"Do any database updates required at process boot time, such as"},{"line_number":89,"context_line":"    updating the traits database."},{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    ctx \u003d db_api.DbContext()"},{"line_number":92,"context_line":"    resource_provider.ensure_trait_sync(ctx)"}],"source_content_type":"text/x-python","patch_set":41,"id":"5f7c97a3_6ece3c5c","line":89,"range":{"start_line":89,"start_character":24,"end_line":89,"end_character":32},"updated":"2018-06-20 16:29:20.000000000","message":"table","commit_id":"0372d82c2c5ae5651b00c5ab9e1cf5c77a8f87d9"}],"nova/test.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dc270d11495892bc28bada3b32e52b5d3dae5e53","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        utils._IS_NEUTRON \u003d None"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        # Reset the traits sync and rc cache flags"},{"line_number":315,"context_line":"        def _reset_traits():"},{"line_number":316,"context_line":"            resource_provider._TRAITS_SYNCED \u003d False"},{"line_number":317,"context_line":"        _reset_traits()"},{"line_number":318,"context_line":"        self.addCleanup(_reset_traits)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_7f857fac","line":315,"updated":"2018-06-08 20:03:04.000000000","message":"Why is this...","commit_id":"58a29bc10c900b6a0fb186304c8e25d0ad8ff039"}],"nova/tests/functional/api/openstack/placement/db/test_base.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dc270d11495892bc28bada3b32e52b5d3dae5e53","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                fixtures.Database(database\u003d\u0027placement\u0027))"},{"line_number":70,"context_line":"        self.ctx \u003d context.RequestContext(\u0027fake-user\u0027, \u0027fake-project\u0027)"},{"line_number":71,"context_line":"        # Do database syncs, such as traits sync."},{"line_number":72,"context_line":"        deploy.update_database()"},{"line_number":73,"context_line":"        # For debugging purposes, populated by _create_provider and used by"},{"line_number":74,"context_line":"        # _validate_allocation_requests to make failure results more readable."},{"line_number":75,"context_line":"        self.rp_uuid_to_name \u003d {}"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_1f8ecbd0","line":72,"updated":"2018-06-08 20:03:04.000000000","message":"...different from this?","commit_id":"58a29bc10c900b6a0fb186304c8e25d0ad8ff039"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ca76fa6fdc59d0264b255ed68fb2b4e74e33939e","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                fixtures.Database(database\u003d\u0027placement\u0027))"},{"line_number":70,"context_line":"        self.ctx \u003d context.RequestContext(\u0027fake-user\u0027, \u0027fake-project\u0027)"},{"line_number":71,"context_line":"        # Do database syncs, such as traits sync."},{"line_number":72,"context_line":"        deploy.update_database()"},{"line_number":73,"context_line":"        # For debugging purposes, populated by _create_provider and used by"},{"line_number":74,"context_line":"        # _validate_allocation_requests to make failure results more readable."},{"line_number":75,"context_line":"        self.rp_uuid_to_name \u003d {}"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_717613db","line":72,"in_reply_to":"5f7c97a3_118f9f2a","updated":"2018-06-08 23:02:15.000000000","message":"No, we want _TRAITS_SYNCED to be False when we call update_database, which happens in the super(). And then when this test is done we want it to be set to False again (which the cleanup in the super ensures).","commit_id":"58a29bc10c900b6a0fb186304c8e25d0ad8ff039"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b093766f9b50381ab19bb9f8af19db0ae22ea4d9","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                fixtures.Database(database\u003d\u0027placement\u0027))"},{"line_number":70,"context_line":"        self.ctx \u003d context.RequestContext(\u0027fake-user\u0027, \u0027fake-project\u0027)"},{"line_number":71,"context_line":"        # Do database syncs, such as traits sync."},{"line_number":72,"context_line":"        deploy.update_database()"},{"line_number":73,"context_line":"        # For debugging purposes, populated by _create_provider and used by"},{"line_number":74,"context_line":"        # _validate_allocation_requests to make failure results more readable."},{"line_number":75,"context_line":"        self.rp_uuid_to_name \u003d {}"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_6e270e14","line":72,"in_reply_to":"5f7c97a3_1f8ecbd0","updated":"2018-06-08 21:48:44.000000000","message":"This is a subclass of the other, so it\u0027s already happened.","commit_id":"58a29bc10c900b6a0fb186304c8e25d0ad8ff039"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"626693119ff3c3254646e5230ec29ea16a182926","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                fixtures.Database(database\u003d\u0027placement\u0027))"},{"line_number":70,"context_line":"        self.ctx \u003d context.RequestContext(\u0027fake-user\u0027, \u0027fake-project\u0027)"},{"line_number":71,"context_line":"        # Do database syncs, such as traits sync."},{"line_number":72,"context_line":"        deploy.update_database()"},{"line_number":73,"context_line":"        # For debugging purposes, populated by _create_provider and used by"},{"line_number":74,"context_line":"        # _validate_allocation_requests to make failure results more readable."},{"line_number":75,"context_line":"        self.rp_uuid_to_name \u003d {}"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_118f9f2a","line":72,"in_reply_to":"5f7c97a3_6e270e14","updated":"2018-06-08 22:33:37.000000000","message":"okay, I see what\u0027s going on now.\n\nDoes this need to happen before super().setUp(), then?","commit_id":"58a29bc10c900b6a0fb186304c8e25d0ad8ff039"}],"nova/tests/functional/api/openstack/placement/db/test_resource_provider.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dc270d11495892bc28bada3b32e52b5d3dae5e53","unresolved":false,"context_lines":[{"line_number":2033,"context_line":"        self.assertRaises(exception.TraitNotFound,"},{"line_number":2034,"context_line":"            rp_obj.Trait.get_by_name, self.ctx, \u0027CUSTOM_TRAIT_A\u0027)"},{"line_number":2035,"context_line":""},{"line_number":2036,"context_line":"    def test_bug_1760322(self):"},{"line_number":2037,"context_line":"        # Under bug # #1760322, if the first hit to the traits table resulted"},{"line_number":2038,"context_line":"        # in an exception, the sync transaction rolled back and the table"},{"line_number":2039,"context_line":"        # stayed empty; but _TRAITS_SYNCED got set to True, so it didn\u0027t resync"},{"line_number":2040,"context_line":"        # next time."},{"line_number":2041,"context_line":"        try:"},{"line_number":2042,"context_line":"            rp_obj.Trait.get_by_name(self.ctx, \u0027CUSTOM_GOLD\u0027)"},{"line_number":2043,"context_line":"        except exception.TraitNotFound:"},{"line_number":2044,"context_line":"            pass"},{"line_number":2045,"context_line":"        # Under bug #1760322, this raised TraitNotFound."},{"line_number":2046,"context_line":"        rp_obj.Trait.get_by_name(self.ctx, os_traits.HW_CPU_X86_AVX2)"},{"line_number":2047,"context_line":""},{"line_number":2048,"context_line":"    def test_trait_destroy(self):"},{"line_number":2049,"context_line":"        t \u003d rp_obj.Trait(self.ctx)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_9fb3bb9a","side":"PARENT","line":2046,"range":{"start_line":2036,"start_character":0,"end_line":2046,"end_character":69},"updated":"2018-06-08 20:03:04.000000000","message":"This doesn\u0027t seem like a bad thing to leave in place.  It still passes, doesn\u0027t it?","commit_id":"74e79abbb09eb70d9ffe76503492e2e7785ba85e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ca76fa6fdc59d0264b255ed68fb2b4e74e33939e","unresolved":false,"context_lines":[{"line_number":2033,"context_line":"        self.assertRaises(exception.TraitNotFound,"},{"line_number":2034,"context_line":"            rp_obj.Trait.get_by_name, self.ctx, \u0027CUSTOM_TRAIT_A\u0027)"},{"line_number":2035,"context_line":""},{"line_number":2036,"context_line":"    def test_bug_1760322(self):"},{"line_number":2037,"context_line":"        # Under bug # #1760322, if the first hit to the traits table resulted"},{"line_number":2038,"context_line":"        # in an exception, the sync transaction rolled back and the table"},{"line_number":2039,"context_line":"        # stayed empty; but _TRAITS_SYNCED got set to True, so it didn\u0027t resync"},{"line_number":2040,"context_line":"        # next time."},{"line_number":2041,"context_line":"        try:"},{"line_number":2042,"context_line":"            rp_obj.Trait.get_by_name(self.ctx, \u0027CUSTOM_GOLD\u0027)"},{"line_number":2043,"context_line":"        except exception.TraitNotFound:"},{"line_number":2044,"context_line":"            pass"},{"line_number":2045,"context_line":"        # Under bug #1760322, this raised TraitNotFound."},{"line_number":2046,"context_line":"        rp_obj.Trait.get_by_name(self.ctx, os_traits.HW_CPU_X86_AVX2)"},{"line_number":2047,"context_line":""},{"line_number":2048,"context_line":"    def test_trait_destroy(self):"},{"line_number":2049,"context_line":"        t \u003d rp_obj.Trait(self.ctx)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_b1410b66","side":"PARENT","line":2046,"range":{"start_line":2036,"start_character":0,"end_line":2046,"end_character":69},"in_reply_to":"5f7c97a3_91916f55","updated":"2018-06-08 23:02:15.000000000","message":"I\u0027ll put it back with a note","commit_id":"74e79abbb09eb70d9ffe76503492e2e7785ba85e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b093766f9b50381ab19bb9f8af19db0ae22ea4d9","unresolved":false,"context_lines":[{"line_number":2033,"context_line":"        self.assertRaises(exception.TraitNotFound,"},{"line_number":2034,"context_line":"            rp_obj.Trait.get_by_name, self.ctx, \u0027CUSTOM_TRAIT_A\u0027)"},{"line_number":2035,"context_line":""},{"line_number":2036,"context_line":"    def test_bug_1760322(self):"},{"line_number":2037,"context_line":"        # Under bug # #1760322, if the first hit to the traits table resulted"},{"line_number":2038,"context_line":"        # in an exception, the sync transaction rolled back and the table"},{"line_number":2039,"context_line":"        # stayed empty; but _TRAITS_SYNCED got set to True, so it didn\u0027t resync"},{"line_number":2040,"context_line":"        # next time."},{"line_number":2041,"context_line":"        try:"},{"line_number":2042,"context_line":"            rp_obj.Trait.get_by_name(self.ctx, \u0027CUSTOM_GOLD\u0027)"},{"line_number":2043,"context_line":"        except exception.TraitNotFound:"},{"line_number":2044,"context_line":"            pass"},{"line_number":2045,"context_line":"        # Under bug #1760322, this raised TraitNotFound."},{"line_number":2046,"context_line":"        rp_obj.Trait.get_by_name(self.ctx, os_traits.HW_CPU_X86_AVX2)"},{"line_number":2047,"context_line":""},{"line_number":2048,"context_line":"    def test_trait_destroy(self):"},{"line_number":2049,"context_line":"        t \u003d rp_obj.Trait(self.ctx)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_ee947eea","side":"PARENT","line":2046,"range":{"start_line":2036,"start_character":0,"end_line":2046,"end_character":69},"in_reply_to":"5f7c97a3_9fb3bb9a","updated":"2018-06-08 21:48:44.000000000","message":"I felt that leaving it in place, at least with this name, was misleading because the code path taken now is much different. Perhaps a rename?","commit_id":"74e79abbb09eb70d9ffe76503492e2e7785ba85e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d0233bb9e80a36bf32a6a3b62569698f4b83ccf5","unresolved":false,"context_lines":[{"line_number":2033,"context_line":"        self.assertRaises(exception.TraitNotFound,"},{"line_number":2034,"context_line":"            rp_obj.Trait.get_by_name, self.ctx, \u0027CUSTOM_TRAIT_A\u0027)"},{"line_number":2035,"context_line":""},{"line_number":2036,"context_line":"    def test_bug_1760322(self):"},{"line_number":2037,"context_line":"        # Under bug # #1760322, if the first hit to the traits table resulted"},{"line_number":2038,"context_line":"        # in an exception, the sync transaction rolled back and the table"},{"line_number":2039,"context_line":"        # stayed empty; but _TRAITS_SYNCED got set to True, so it didn\u0027t resync"},{"line_number":2040,"context_line":"        # next time."},{"line_number":2041,"context_line":"        try:"},{"line_number":2042,"context_line":"            rp_obj.Trait.get_by_name(self.ctx, \u0027CUSTOM_GOLD\u0027)"},{"line_number":2043,"context_line":"        except exception.TraitNotFound:"},{"line_number":2044,"context_line":"            pass"},{"line_number":2045,"context_line":"        # Under bug #1760322, this raised TraitNotFound."},{"line_number":2046,"context_line":"        rp_obj.Trait.get_by_name(self.ctx, os_traits.HW_CPU_X86_AVX2)"},{"line_number":2047,"context_line":""},{"line_number":2048,"context_line":"    def test_trait_destroy(self):"},{"line_number":2049,"context_line":"        t \u003d rp_obj.Trait(self.ctx)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_448a3364","side":"PARENT","line":2046,"range":{"start_line":2036,"start_character":0,"end_line":2046,"end_character":69},"in_reply_to":"5f7c97a3_b1410b66","updated":"2018-06-08 23:21:23.000000000","message":"Done","commit_id":"74e79abbb09eb70d9ffe76503492e2e7785ba85e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"626693119ff3c3254646e5230ec29ea16a182926","unresolved":false,"context_lines":[{"line_number":2033,"context_line":"        self.assertRaises(exception.TraitNotFound,"},{"line_number":2034,"context_line":"            rp_obj.Trait.get_by_name, self.ctx, \u0027CUSTOM_TRAIT_A\u0027)"},{"line_number":2035,"context_line":""},{"line_number":2036,"context_line":"    def test_bug_1760322(self):"},{"line_number":2037,"context_line":"        # Under bug # #1760322, if the first hit to the traits table resulted"},{"line_number":2038,"context_line":"        # in an exception, the sync transaction rolled back and the table"},{"line_number":2039,"context_line":"        # stayed empty; but _TRAITS_SYNCED got set to True, so it didn\u0027t resync"},{"line_number":2040,"context_line":"        # next time."},{"line_number":2041,"context_line":"        try:"},{"line_number":2042,"context_line":"            rp_obj.Trait.get_by_name(self.ctx, \u0027CUSTOM_GOLD\u0027)"},{"line_number":2043,"context_line":"        except exception.TraitNotFound:"},{"line_number":2044,"context_line":"            pass"},{"line_number":2045,"context_line":"        # Under bug #1760322, this raised TraitNotFound."},{"line_number":2046,"context_line":"        rp_obj.Trait.get_by_name(self.ctx, os_traits.HW_CPU_X86_AVX2)"},{"line_number":2047,"context_line":""},{"line_number":2048,"context_line":"    def test_trait_destroy(self):"},{"line_number":2049,"context_line":"        t \u003d rp_obj.Trait(self.ctx)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_91916f55","side":"PARENT","line":2046,"range":{"start_line":2036,"start_character":0,"end_line":2046,"end_character":69},"in_reply_to":"5f7c97a3_ee947eea","updated":"2018-06-08 22:33:37.000000000","message":"or extra commentary that we\u0027ve now totally yanked the code path that was causing the original bug, but are leaving this in place to make sure we didn\u0027t/don\u0027t reintroduce the behavior in the new code path.\n\nor go ahead and whack the method, and I won\u0027t complain further.","commit_id":"74e79abbb09eb70d9ffe76503492e2e7785ba85e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7359b8151d3ba98f8e3fae2ded71b366a80356b2","unresolved":false,"context_lines":[{"line_number":2043,"context_line":"        self.assertRaises(exception.TraitNotFound, rp_obj.Trait.get_by_name,"},{"line_number":2044,"context_line":"                          self.ctx, \u0027CUSTOM_TRAIT_A\u0027)"},{"line_number":2045,"context_line":""},{"line_number":2046,"context_line":"    def test_bug_1760322(self):"},{"line_number":2047,"context_line":"        # Under bug # #1760322, if the first hit to the traits table resulted"},{"line_number":2048,"context_line":"        # in an exception, the sync transaction rolled back and the table"},{"line_number":2049,"context_line":"        # stayed empty; but _TRAITS_SYNCED got set to True, so it didn\u0027t resync"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_cd5631cf","line":2046,"updated":"2018-06-12 12:17:17.000000000","message":"nit: a bit strange that this is moved one TC below from its original place","commit_id":"102ed3cb20d9b3be49e540e308c11edabafd7298"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f916522ec7aa2f049ecde0f966a3df7879c7f4bf","unresolved":false,"context_lines":[{"line_number":2043,"context_line":"        self.assertRaises(exception.TraitNotFound, rp_obj.Trait.get_by_name,"},{"line_number":2044,"context_line":"                          self.ctx, \u0027CUSTOM_TRAIT_A\u0027)"},{"line_number":2045,"context_line":""},{"line_number":2046,"context_line":"    def test_bug_1760322(self):"},{"line_number":2047,"context_line":"        # Under bug # #1760322, if the first hit to the traits table resulted"},{"line_number":2048,"context_line":"        # in an exception, the sync transaction rolled back and the table"},{"line_number":2049,"context_line":"        # stayed empty; but _TRAITS_SYNCED got set to True, so it didn\u0027t resync"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_6dbd9daf","line":2046,"in_reply_to":"5f7c97a3_cd5631cf","updated":"2018-06-12 12:22:27.000000000","message":"I had removed it in an earlier patchset, and I guess when I put it back I moved it without meaning to, will fix.","commit_id":"102ed3cb20d9b3be49e540e308c11edabafd7298"}],"nova/tests/functional/integrated_helpers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fbe70bed06853b68a3a63e36db5dec5363dcbada","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        self.useFixture(cast_as_call.CastAsCall(self))"},{"line_number":88,"context_line":"        self.useFixture(nova_fixtures.Database(database\u003d\u0027placement\u0027))"},{"line_number":89,"context_line":"        placement \u003d self.useFixture(nova_fixtures.PlacementFixture())"},{"line_number":90,"context_line":"        self.placement_api \u003d placement.api"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        self._setup_services()"}],"source_content_type":"text/x-python","patch_set":41,"id":"5f7c97a3_0e7a28ef","line":89,"range":{"start_line":89,"start_character":50,"end_line":89,"end_character":66},"updated":"2018-06-20 16:29:20.000000000","message":"Could be in a follow up, but if:\n\nself.useFixture(nova_fixtures.Database(database\u003d\u0027placement\u0027))\n\nIs required to use the PlacementFixture, it would be good to mention that in the docstring for the PlacementFixture itself. It can be hard to figure out why things aren\u0027t working because of undocumented dependencies between fixtures.","commit_id":"0372d82c2c5ae5651b00c5ab9e1cf5c77a8f87d9"}]}
