)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3e5afb68748aae9d94f22bc718b301a87ecc2073","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add generic reproducer for bug #1879878"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"No need for the libvirt driver in all its complexity here."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ifea9a15fb01c0b25e9973024f4f61faecc56e1cd"},{"line_number":12,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f560f44_b9ed8026","line":9,"updated":"2020-08-26 10:06:49.000000000","message":"Note: The libvirt test does still make sense since we can\u0027t test NUMA without it. This is just another, related-race and it made sense to do it outside the context of libvirt","commit_id":"e1adbced92453329f7285ec38c1dc7821ebb52c7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"22710b19898130ce182e8fe2b82d39fb15419186","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add generic reproducer for bug #1879878"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"No need for the libvirt driver in all its complexity here."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ifea9a15fb01c0b25e9973024f4f61faecc56e1cd"},{"line_number":12,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f560f44_ba28c932","line":9,"in_reply_to":"9f560f44_b9ed8026","updated":"2020-08-26 15:28:59.000000000","message":"Yeah, you\u0027re right, we somehow regressed hence this specific functional testing.","commit_id":"e1adbced92453329f7285ec38c1dc7821ebb52c7"}],"nova/tests/functional/regressions/test_bug_1879878.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"91c961f9b2bc33f71e9c089b5c7d883a03bb39c1","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    \"\"\"Reproducer for bug #1879878."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    Demonstrate the possibility of races caused by running the resource"},{"line_number":27,"context_line":"    tracker\u0027s periodic task between marking a migration as confirmed or"},{"line_number":28,"context_line":"    reverted and dropping the claim for that migration on the source or"},{"line_number":29,"context_line":"    destination host, respectively."},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    compute_driver \u003d \u0027fake.MediumFakeDriver\u0027"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_713833d2","line":29,"range":{"start_line":27,"start_character":28,"end_line":29,"end_character":35},"updated":"2020-08-25 13:35:14.000000000","message":"IOW:\n\n1. Issue the migration confirm/revert\n2. Periodic runs\n3. Claim is dropped on source/dest\n\nYes?","commit_id":"0a15bb2cb0b49b10d6ffdb100abf7c5544e9b1d7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"11720305448c60cdc9edc4d65e99031802c4cb63","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    \"\"\"Reproducer for bug #1879878."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    Demonstrate the possibility of races caused by running the resource"},{"line_number":27,"context_line":"    tracker\u0027s periodic task between marking a migration as confirmed or"},{"line_number":28,"context_line":"    reverted and dropping the claim for that migration on the source or"},{"line_number":29,"context_line":"    destination host, respectively."},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    compute_driver \u003d \u0027fake.MediumFakeDriver\u0027"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_c7b86112","line":29,"range":{"start_line":27,"start_character":28,"end_line":29,"end_character":35},"in_reply_to":"9f560f44_713833d2","updated":"2020-08-25 15:09:51.000000000","message":"Yup","commit_id":"0a15bb2cb0b49b10d6ffdb100abf7c5544e9b1d7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"91c961f9b2bc33f71e9c089b5c7d883a03bb39c1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        target_host \u003d \u0027host2\u0027 if source_host \u003d\u003d \u0027host1\u0027 else \u0027host1\u0027"},{"line_number":48,"context_line":"        return server, source_host, target_host"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def assertUsage(self, hostname, usage):"},{"line_number":51,"context_line":"        cn \u003d objects.ComputeNode.get_by_nodename(self.ctxt, hostname)"},{"line_number":52,"context_line":"        # we could test anything, but vcpu is easy to grok"},{"line_number":53,"context_line":"        self.assertEqual(cn.vcpus_used, usage)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_31a6bb10","line":50,"updated":"2020-08-25 13:35:14.000000000","message":"Rename this to something that better reflects its usage please, lines 60 and 61 are completely inscrutable. So maybe assert_vcpus_used(self, hostname, num_vcpus) or something.","commit_id":"0a15bb2cb0b49b10d6ffdb100abf7c5544e9b1d7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8217ca9302b714329420ef8b0d4f22c4509f4074","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        target_host \u003d \u0027host2\u0027 if source_host \u003d\u003d \u0027host1\u0027 else \u0027host1\u0027"},{"line_number":48,"context_line":"        return server, source_host, target_host"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def assertUsage(self, hostname, usage):"},{"line_number":51,"context_line":"        cn \u003d objects.ComputeNode.get_by_nodename(self.ctxt, hostname)"},{"line_number":52,"context_line":"        # we could test anything, but vcpu is easy to grok"},{"line_number":53,"context_line":"        self.assertEqual(cn.vcpus_used, usage)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_87002936","line":50,"in_reply_to":"9f560f44_31a6bb10","updated":"2020-08-25 15:10:13.000000000","message":"Done","commit_id":"0a15bb2cb0b49b10d6ffdb100abf7c5544e9b1d7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"91c961f9b2bc33f71e9c089b5c7d883a03bb39c1","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                self.assertUsage(src_host, 0)"},{"line_number":97,"context_line":"                self.assertUsage(dst_host, 1)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            # and that\u0027s perfectly fine"},{"line_number":100,"context_line":"            return orig_drop_claim(*args, **kwargs)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.stub_out("}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_91dea76a","line":99,"updated":"2020-08-25 13:35:14.000000000","message":"?","commit_id":"0a15bb2cb0b49b10d6ffdb100abf7c5544e9b1d7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8217ca9302b714329420ef8b0d4f22c4509f4074","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                self.assertUsage(src_host, 0)"},{"line_number":97,"context_line":"                self.assertUsage(dst_host, 1)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            # and that\u0027s perfectly fine"},{"line_number":100,"context_line":"            return orig_drop_claim(*args, **kwargs)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.stub_out("}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_e7fbe543","line":99,"in_reply_to":"9f560f44_91dea76a","updated":"2020-08-25 15:10:13.000000000","message":"Done","commit_id":"0a15bb2cb0b49b10d6ffdb100abf7c5544e9b1d7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"91c961f9b2bc33f71e9c089b5c7d883a03bb39c1","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # migration is now confirmed so we should once again only have usage on"},{"line_number":122,"context_line":"        # one host"},{"line_number":123,"context_line":"        # FIXME(stephenfin): Our usage here should be 0 and 1 for source and"},{"line_number":124,"context_line":"        # dest respectively when confirming, but that won\u0027t happen until we run"},{"line_number":125,"context_line":"        # the periodic and rebuild our inventory from scratch"},{"line_number":126,"context_line":"        self.assertUsage(src_host, -1 if drop_race else 0)"},{"line_number":127,"context_line":"        self.assertUsage(dst_host, 1)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_91234756","line":125,"range":{"start_line":124,"start_character":45,"end_line":125,"end_character":61},"updated":"2020-08-25 13:35:14.000000000","message":"nit: I\u0027d rather call back to drop_move_claim() erroneously dropping usage.","commit_id":"0a15bb2cb0b49b10d6ffdb100abf7c5544e9b1d7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"91c961f9b2bc33f71e9c089b5c7d883a03bb39c1","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        # migration is now reverted so we should once again only have usage on"},{"line_number":180,"context_line":"        # one host"},{"line_number":181,"context_line":"        # FIXME(stephenfin): Our usage here should always be 1 and 0 for source"},{"line_number":182,"context_line":"        # and dest respectively when reverting, but that won\u0027t happen until we"},{"line_number":183,"context_line":"        # run the periodic and rebuild our inventory from scratch"},{"line_number":184,"context_line":"        self.assertUsage(src_host, 0 if drop_race else 1)"},{"line_number":185,"context_line":"        self.assertUsage(dst_host, 1 if drop_race else 0)"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_11be17d4","line":183,"range":{"start_line":182,"start_character":48,"end_line":183,"end_character":65},"updated":"2020-08-25 13:35:14.000000000","message":"Ditto, re: callback","commit_id":"0a15bb2cb0b49b10d6ffdb100abf7c5544e9b1d7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"22710b19898130ce182e8fe2b82d39fb15419186","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"@ddt.ddt"},{"line_number":22,"context_line":"class TestColdMigrationUsage(integrated_helpers.ProviderUsageBaseTestCase):"},{"line_number":23,"context_line":"    \"\"\"Reproducer for bug #1879878."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    Demonstrate the possibility of races caused by running the resource"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_facb616e","line":22,"range":{"start_line":22,"start_character":48,"end_line":22,"end_character":73},"updated":"2020-08-26 15:28:59.000000000","message":"since you don\u0027t verify allocations or inventories, you don\u0027t really need to inherit from the above test class.\n\n\nI\u0027d ask you to rather simply use the InstanceHelperMixin with the standard TestBase class.\n\n(This would help our efforts to scrub all the large number of test classes we have for functional testing where we duplicate a large number of methods by not providing another unnecessary dependency)","commit_id":"e1adbced92453329f7285ec38c1dc7821ebb52c7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c9112a72bdecb34774dbcfb534439f80ba1fc9b6","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"@ddt.ddt"},{"line_number":22,"context_line":"class TestColdMigrationUsage(integrated_helpers.ProviderUsageBaseTestCase):"},{"line_number":23,"context_line":"    \"\"\"Reproducer for bug #1879878."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    Demonstrate the possibility of races caused by running the resource"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_e0ce142b","line":22,"range":{"start_line":22,"start_character":48,"end_line":22,"end_character":73},"in_reply_to":"9f560f44_00e34806","updated":"2020-08-26 16:39:57.000000000","message":"To be clear, if I use \u0027InstanceHelperMixin\u0027 and \u0027test.TestBase\u0027, then I need to do something like [1]. \u0027_IntegratedTestBase\u0027 inherits from \u0027InstanceHelperMixin\u0027 and \u0027test.TestBase\u0027 and done this fixture setup/service startup for us.\n\n[1] https://github.com/openstack/nova/blob/a7735d5e379c20c59cfb639f9f4d339bcffca2f9/nova/tests/functional/regressions/test_bug_1849409.py#L30-L40","commit_id":"e1adbced92453329f7285ec38c1dc7821ebb52c7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"93e3fa324996974a18f8be78f57f2f8fae84261f","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"@ddt.ddt"},{"line_number":22,"context_line":"class TestColdMigrationUsage(integrated_helpers.ProviderUsageBaseTestCase):"},{"line_number":23,"context_line":"    \"\"\"Reproducer for bug #1879878."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    Demonstrate the possibility of races caused by running the resource"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_00e34806","line":22,"range":{"start_line":22,"start_character":48,"end_line":22,"end_character":73},"in_reply_to":"9f560f44_facb616e","updated":"2020-08-26 16:26:24.000000000","message":"Done at [1]...sort of. I updated to use \u0027_IntegratedTestBase\u0027 since inheriting from the mixin means I need to set up a load of fixtures manually. Far too much duplication for my liking.\n\n[1] https://review.opendev.org/748271","commit_id":"e1adbced92453329f7285ec38c1dc7821ebb52c7"}]}
