)]}'
{"nova/tests/functional/regressions/test_bug_1284424.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"33989df7518b6d8cc99a3c05d7425568ef9a148c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                self.compute.start()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Asynchronously restart the compute service while deleting the servers"},{"line_number":111,"context_line":"        gt \u003d greenthread.spawn(_restart_compute, self)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # delete the 5 servers"},{"line_number":114,"context_line":"        for server in servers:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_fed14458","line":111,"updated":"2016-03-23 21:32:24.000000000","message":"I\u0027m thinking we might need to stop nova-compute right after a delete request or otherwise ensure nova-compute is down when the delete request hits, based on the latest comment on the lp bug by someone who has reproduced the problem on devstack","commit_id":"b8d02f3394b66a9cd5b1a21c1dcfeaac168fae9c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b5e5b4f7d86cdfebd861b3f198885e1c8f40cfb","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                self.compute.start()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Asynchronously restart the compute service while deleting the servers"},{"line_number":111,"context_line":"        gt \u003d greenthread.spawn(_restart_compute, self)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # delete the 5 servers"},{"line_number":114,"context_line":"        for server in servers:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_b257f8c8","line":111,"in_reply_to":"fa0719c6_fed14458","updated":"2016-03-24 01:14:15.000000000","message":"I have some draft changes sitting locally that I was working on to try and get this closer to jogo\u0027s recreate script, but things started getting really non-deterministic (which is maybe expected). But then I got distracted by other shiny things and now it\u0027s a (local) mess. I was going to take a break and try to see if I could recreate what jogo was seeing with his script in devstack before returning to this.","commit_id":"b8d02f3394b66a9cd5b1a21c1dcfeaac168fae9c"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"42d50f9fe037161a2302c0cfc2a2599ac23db12e","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                      servers[-1][\u0027id\u0027])"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        # assert the servers are deleted"},{"line_number":132,"context_line":"        servers \u003d self.api.get_servers(detail\u003dFalse)"},{"line_number":133,"context_line":"        self.assertEqual(0, len(servers))"},{"line_number":134,"context_line":"        # assert our instances usage is 0"},{"line_number":135,"context_line":"        limits \u003d self.api.get_absolute_limits()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_6f72bd12","line":132,"range":{"start_line":132,"start_character":27,"end_line":132,"end_character":38},"updated":"2016-03-17 20:08:56.000000000","message":"can we guarantee the servers[-1] is the last one to be deleted? otherwise, maybe still some servers existing when we do the check here?","commit_id":"b8d02f3394b66a9cd5b1a21c1dcfeaac168fae9c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b5e5b4f7d86cdfebd861b3f198885e1c8f40cfb","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                      servers[-1][\u0027id\u0027])"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        # assert the servers are deleted"},{"line_number":132,"context_line":"        servers \u003d self.api.get_servers(detail\u003dFalse)"},{"line_number":133,"context_line":"        self.assertEqual(0, len(servers))"},{"line_number":134,"context_line":"        # assert our instances usage is 0"},{"line_number":135,"context_line":"        limits \u003d self.api.get_absolute_limits()"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_d270ac74","line":132,"range":{"start_line":132,"start_character":27,"end_line":132,"end_character":38},"in_reply_to":"1af94dfe_6f72bd12","updated":"2016-03-24 01:14:15.000000000","message":"In my local draft of this I don\u0027t wait for deleted anymore, so this goes away.","commit_id":"b8d02f3394b66a9cd5b1a21c1dcfeaac168fae9c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c6c326dd0ee6368fe09d01bb0e686ab5e5602db","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    # copied from ServersTestBase"},{"line_number":42,"context_line":"    def _wait_for_state_change(self, server, from_status):"},{"line_number":43,"context_line":"        for i in range(0, 50):"},{"line_number":44,"context_line":"            server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":45,"context_line":"            if server[\u0027status\u0027] !\u003d from_status:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_b93204f0","line":42,"updated":"2016-08-07 07:36:20.000000000","message":"We have at least two similar copy of this function one in ServerTestBase and one in integrated_helpers https://github.com/openstack/nova/blob/master/nova/tests/functional/integrated_helpers.py#L205\nDo we need a third copy?","commit_id":"971ee21837e37ad465a1c7dce9702b36c4ac7311"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fbe550147927f4eb8fa977b16f4d27724d11cd4b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    # copied from ServersTestBase"},{"line_number":42,"context_line":"    def _wait_for_state_change(self, server, from_status):"},{"line_number":43,"context_line":"        for i in range(0, 50):"},{"line_number":44,"context_line":"            server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":45,"context_line":"            if server[\u0027status\u0027] !\u003d from_status:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_39ceff83","line":42,"in_reply_to":"bacf61ea_b93204f0","updated":"2016-09-02 23:07:44.000000000","message":"I might be able to make use of the InstanceHelperMixin here. I can\u0027t inherit from either of the base test cases because I specifically need to not have CastAsCall in these tests.","commit_id":"971ee21837e37ad465a1c7dce9702b36c4ac7311"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c6c326dd0ee6368fe09d01bb0e686ab5e5602db","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        return server"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # adapted from ServersTestBase"},{"line_number":52,"context_line":"    def _wait_for_deletion(self, server_id):"},{"line_number":53,"context_line":"        # Wait (briefly) for deletion"},{"line_number":54,"context_line":"        for _retries in range(50):"},{"line_number":55,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_f94e3c6d","line":52,"updated":"2016-08-07 07:36:20.000000000","message":"This also has two similar copy one in ServersTestBase and on in NotificationSampleTestBase https://github.com/openstack/nova/blob/master/nova/tests/functional/notification_sample_tests/notification_sample_base.py#L168\nDo we need a third one?","commit_id":"971ee21837e37ad465a1c7dce9702b36c4ac7311"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fbe550147927f4eb8fa977b16f4d27724d11cd4b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        return server"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # adapted from ServersTestBase"},{"line_number":52,"context_line":"    def _wait_for_deletion(self, server_id):"},{"line_number":53,"context_line":"        # Wait (briefly) for deletion"},{"line_number":54,"context_line":"        for _retries in range(50):"},{"line_number":55,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_59cbc372","line":52,"in_reply_to":"bacf61ea_f94e3c6d","updated":"2016-09-02 23:07:44.000000000","message":"I think I could add something to InstanceHelperMixin for reuse. Other than that, none of the variations do what I need (because of soft-delete).","commit_id":"971ee21837e37ad465a1c7dce9702b36c4ac7311"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c6c326dd0ee6368fe09d01bb0e686ab5e5602db","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        # Make sure that max_age or until_refresh aren\u0027t set so that new"},{"line_number":126,"context_line":"        # reservations don\u0027t try to re-sync the usage."},{"line_number":127,"context_line":"        self.assertEqual(0, CONF.max_age)"},{"line_number":128,"context_line":"        self.assertEqual(0, CONF.until_refresh)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        limits \u003d self.api.get_absolute_limits()"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_593e68b8","line":127,"updated":"2016-08-07 07:36:20.000000000","message":"Default is 0 already","commit_id":"971ee21837e37ad465a1c7dce9702b36c4ac7311"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fbe550147927f4eb8fa977b16f4d27724d11cd4b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        # Make sure that max_age or until_refresh aren\u0027t set so that new"},{"line_number":126,"context_line":"        # reservations don\u0027t try to re-sync the usage."},{"line_number":127,"context_line":"        self.assertEqual(0, CONF.max_age)"},{"line_number":128,"context_line":"        self.assertEqual(0, CONF.until_refresh)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        limits \u003d self.api.get_absolute_limits()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_6e499fd0","line":127,"in_reply_to":"bacf61ea_593e68b8","updated":"2016-09-02 23:07:44.000000000","message":"Yes, it is presently. These tests rely on refresh being turned off so this is verifying that. I guess really this should use self.flags(max_age\u003d0) to ensure it\u0027s disabled.","commit_id":"971ee21837e37ad465a1c7dce9702b36c4ac7311"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c6c326dd0ee6368fe09d01bb0e686ab5e5602db","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        # Make sure that max_age or until_refresh aren\u0027t set so that new"},{"line_number":126,"context_line":"        # reservations don\u0027t try to re-sync the usage."},{"line_number":127,"context_line":"        self.assertEqual(0, CONF.max_age)"},{"line_number":128,"context_line":"        self.assertEqual(0, CONF.until_refresh)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        limits \u003d self.api.get_absolute_limits()"},{"line_number":131,"context_line":"        # make sure we start with no usage"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_99446047","line":128,"updated":"2016-08-07 07:36:20.000000000","message":"Default is 0 already","commit_id":"971ee21837e37ad465a1c7dce9702b36c4ac7311"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fbe550147927f4eb8fa977b16f4d27724d11cd4b","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        # Make sure that max_age or until_refresh aren\u0027t set so that new"},{"line_number":126,"context_line":"        # reservations don\u0027t try to re-sync the usage."},{"line_number":127,"context_line":"        self.assertEqual(0, CONF.max_age)"},{"line_number":128,"context_line":"        self.assertEqual(0, CONF.until_refresh)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        limits \u003d self.api.get_absolute_limits()"},{"line_number":131,"context_line":"        # make sure we start with no usage"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_8e46e3bd","line":128,"in_reply_to":"bacf61ea_99446047","updated":"2016-09-02 23:07:44.000000000","message":"Same reply","commit_id":"971ee21837e37ad465a1c7dce9702b36c4ac7311"}]}
