)]}'
{"tempest/api/compute/admin/test_volume_swap.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"05e8e2d356dcbb191c7f8a8b85e96a0751af574b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                        server[\u0027id\u0027], volume2[\u0027id\u0027])"},{"line_number":63,"context_line":"        # Verify \"volume1\" is detached from the server, and \"volume2\" is"},{"line_number":64,"context_line":"        # attached to the server"},{"line_number":65,"context_line":"        waiters.wait_for_server_volume_swap(self.servers_client, server[\u0027id\u0027],"},{"line_number":66,"context_line":"                                            volume1[\u0027id\u0027], volume2[\u0027id\u0027])"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        # TODO(mriedem): Test swapping back from volume2 to volume1 after"},{"line_number":69,"context_line":"        # nova bug 1490236 is fixed."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_3855dc4f","line":66,"range":{"start_line":65,"start_character":8,"end_line":66,"end_character":73},"updated":"2017-03-02 07:08:17.000000000","message":"1. if old volume is available and new volume is in-use, it seems sure that list_volume_attachments should have\nthe proper value(only new volume id), so I don\u0027t get the benefit of waiters here?\n2. if no wait is needed, then it seems you only need to add check whether old volume id is not in the vol_attachments.","commit_id":"894fa4c980cb9fc9ee05a32fac580a7175aa0477"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"5a562ee5f887d7290f167b8eb35753dc80e4a253","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                        server[\u0027id\u0027], volume2[\u0027id\u0027])"},{"line_number":63,"context_line":"        # Verify \"volume1\" is detached from the server, and \"volume2\" is"},{"line_number":64,"context_line":"        # attached to the server"},{"line_number":65,"context_line":"        waiters.wait_for_server_volume_swap(self.servers_client, server[\u0027id\u0027],"},{"line_number":66,"context_line":"                                            volume1[\u0027id\u0027], volume2[\u0027id\u0027])"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        # TODO(mriedem): Test swapping back from volume2 to volume1 after"},{"line_number":69,"context_line":"        # nova bug 1490236 is fixed."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_2c367fe6","line":66,"range":{"start_line":65,"start_character":8,"end_line":66,"end_character":73},"in_reply_to":"ba2be162_3855dc4f","updated":"2017-03-02 08:28:25.000000000","message":"When old volume is available and new volume is in-use, it can\u0027t be sure to say that the swap procedure has been finished. the volume_attachments in server may still not be changed.\n\nI had meet this problem in my first patch, the code had go to the last assert in test_volume_swap, but the result turn outs two different volume attchments.\n\nTraceback (most recent call last):\n2017-03-01 16:27:31.609357 |       File \"tempest/test.py\", line 102, in wrapper\n2017-03-01 16:27:31.609372 |         return f(self, *func_args, **func_kwargs)\n2017-03-01 16:27:31.609461 |       File \"tempest/api/compute/admin/test_volume_swap.py\", line 67, in test_volume_swap\n2017-03-01 16:27:31.609492 |         self.assertEqual(volume2[\u0027id\u0027], vol_attachments[0][\u0027volumeId\u0027])\n2017-03-01 16:27:31.609525 |       File \"/opt/stack/new/tempest/.tox/tempest/local/lib/python2.7/site-packages/testtools/testcase.py\", line 411, in assertEqual\n2017-03-01 16:27:31.609543 |         self.assertThat(observed, matcher, message)\n2017-03-01 16:27:31.609576 |       File \"/opt/stack/new/tempest/.tox/tempest/local/lib/python2.7/site-packages/testtools/testcase.py\", line 498, in assertThat\n2017-03-01 16:27:31.609596 |         raise mismatch_error\n2017-03-01 16:27:31.609622 |     testtools.matchers._impl.MismatchError: !\u003d:\n2017-03-01 16:27:31.609638 |     reference \u003d u\u00271eb054be-fbf6-48c9-af1d-d43d81dfd1a1\u0027\n2017-03-01 16:27:31.609653 |     actual    \u003d u\u0027ed046cd8-1ad6-4f87-b168-5e354327bfce\u0027\n\nmost of the jenkins job had passed, I think the reason is that the size of volume is small, and swap procedure would be finished quickly enough to update the volume_attachment in server.","commit_id":"894fa4c980cb9fc9ee05a32fac580a7175aa0477"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"1e757d4720d128122050b7f05f0faef4c672807d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        vol_attachments \u003d self.servers_client.list_volume_attachments("},{"line_number":66,"context_line":"            server[\u0027id\u0027])[\u0027volumeAttachments\u0027]"},{"line_number":67,"context_line":"        self.assertEqual(1, len(vol_attachments))"},{"line_number":68,"context_line":"        self.assertIn(volume2[\u0027id\u0027], vol_attachments[0][\u0027volumeId\u0027])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Swap volume from \"volume2\" to \"volume1\""},{"line_number":71,"context_line":"        self.admin_servers_client.update_attached_volume("}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_2df01167","side":"PARENT","line":68,"updated":"2017-03-21 09:41:00.000000000","message":"Why did you remove the assertions ? You can make wait_for_server_volume_swap return some value to still make some assertions.","commit_id":"5c5e13dc8f64e313da86f81ac9826d4d4fbe9bc3"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"ccf5c09bfdf4527ef127bd8b721459006d5ac16f","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        vol_attachments \u003d self.servers_client.list_volume_attachments("},{"line_number":66,"context_line":"            server[\u0027id\u0027])[\u0027volumeAttachments\u0027]"},{"line_number":67,"context_line":"        self.assertEqual(1, len(vol_attachments))"},{"line_number":68,"context_line":"        self.assertIn(volume2[\u0027id\u0027], vol_attachments[0][\u0027volumeId\u0027])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Swap volume from \"volume2\" to \"volume1\""},{"line_number":71,"context_line":"        self.admin_servers_client.update_attached_volume("}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_35013306","side":"PARENT","line":68,"in_reply_to":"1a1ced50_2df01167","updated":"2017-03-21 11:10:35.000000000","message":"In wait_for_server_volume_swap, it will wait for the origianl volume detached from BDM and the new volume attached to BDM by calling list_volume_attachments in servers client. I think it has the same effect with the assertion deleted.","commit_id":"5c5e13dc8f64e313da86f81ac9826d4d4fbe9bc3"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"7955ba990d6f520b9631b9413595d814b2e12d7a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        vol_attachments \u003d self.servers_client.list_volume_attachments("},{"line_number":66,"context_line":"            server[\u0027id\u0027])[\u0027volumeAttachments\u0027]"},{"line_number":67,"context_line":"        self.assertEqual(1, len(vol_attachments))"},{"line_number":68,"context_line":"        self.assertIn(volume2[\u0027id\u0027], vol_attachments[0][\u0027volumeId\u0027])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Swap volume from \"volume2\" to \"volume1\""},{"line_number":71,"context_line":"        self.admin_servers_client.update_attached_volume("}],"source_content_type":"text/x-python","patch_set":10,"id":"1a1ced50_a9af6b28","side":"PARENT","line":68,"updated":"2017-03-22 03:21:59.000000000","message":"These asserts verify the swap explicitly. So I think it\u0027s good to keep these.","commit_id":"4411b2992c4f093ddc893e2e8149b2277d35c137"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"57e22d6bf80c1b29a416e9d28d4a4ac4530ac739","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        vol_attachments \u003d self.servers_client.list_volume_attachments("},{"line_number":66,"context_line":"            server[\u0027id\u0027])[\u0027volumeAttachments\u0027]"},{"line_number":67,"context_line":"        self.assertEqual(1, len(vol_attachments))"},{"line_number":68,"context_line":"        self.assertIn(volume2[\u0027id\u0027], vol_attachments[0][\u0027volumeId\u0027])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Swap volume from \"volume2\" to \"volume1\""},{"line_number":71,"context_line":"        self.admin_servers_client.update_attached_volume("}],"source_content_type":"text/x-python","patch_set":10,"id":"1a1ced50_2cd7094c","side":"PARENT","line":68,"in_reply_to":"1a1ced50_a9af6b28","updated":"2017-03-22 03:35:41.000000000","message":"Ok, the asserts will be kept. Thank you.","commit_id":"4411b2992c4f093ddc893e2e8149b2277d35c137"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"06f577fbfbb36ccbda2c33bb9eea39e03da394ad","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                                                volume2[\u0027id\u0027], \u0027in-use\u0027)"},{"line_number":102,"context_line":"        self._wait_for_server_volume_swap(server[\u0027id\u0027], volume1[\u0027id\u0027],"},{"line_number":103,"context_line":"                                          volume2[\u0027id\u0027])"},{"line_number":104,"context_line":"        # Verify \"volume2\" is attached to the server"},{"line_number":105,"context_line":"        vol_attachments \u003d self.servers_client.list_volume_attachments("},{"line_number":106,"context_line":"            server[\u0027id\u0027])[\u0027volumeAttachments\u0027]"},{"line_number":107,"context_line":"        self.assertEqual(1, len(vol_attachments))"},{"line_number":108,"context_line":"        self.assertIn(volume2[\u0027id\u0027], vol_attachments[0][\u0027volumeId\u0027])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Swap volume from \"volume2\" to \"volume1\""},{"line_number":111,"context_line":"        self.admin_servers_client.update_attached_volume("}],"source_content_type":"text/x-python","patch_set":11,"id":"ffe62b97_28e3c835","line":108,"range":{"start_line":104,"start_character":0,"end_line":108,"end_character":68},"updated":"2017-03-24 15:31:19.000000000","message":"TBH I agree with your original implementation that this is now redundant, as these assertions will either not be reached or be true. But it doesn\u0027t hurt and I guess it makes the test code easier to read, so it\u0027s fine to keep it. An extra API call won\u0027t make a big difference anyways.","commit_id":"c9d5800cce4f945194e60384cf9d2675f6182661"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"6d74dea77677425d01442cc69894d237306d589c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        vol_attachments \u003d self.servers_client.list_volume_attachments("},{"line_number":106,"context_line":"            server[\u0027id\u0027])[\u0027volumeAttachments\u0027]"},{"line_number":107,"context_line":"        self.assertEqual(1, len(vol_attachments))"},{"line_number":108,"context_line":"        self.assertIn(volume2[\u0027id\u0027], vol_attachments[0][\u0027volumeId\u0027])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Swap volume from \"volume2\" to \"volume1\""},{"line_number":111,"context_line":"        self.admin_servers_client.update_attached_volume("}],"source_content_type":"text/x-python","patch_set":11,"id":"ffe62b97_efafbb7a","line":108,"updated":"2017-03-28 08:17:09.000000000","message":"heh, yeah, if it\u0027s better, we can push a following patch :)","commit_id":"c9d5800cce4f945194e60384cf9d2675f6182661"}],"tempest/common/waiters.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"b38b3b3975ca583814a93726bf453cfc27403025","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                               for attachment in volume_attachments]"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        if int(time.time()) - start \u003e\u003d client.build_timeout:"},{"line_number":308,"context_line":"            message \u003d (\u0027Failed to swap old volume %s to new volume %s \u0027"},{"line_number":309,"context_line":"                       \u0027on server %s within the required time (%s s).\u0027 %"},{"line_number":310,"context_line":"                       (old_volume_id, new_volume_id, server_id,"},{"line_number":311,"context_line":"                        client.build_timeout))"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_f444f31b","line":308,"range":{"start_line":308,"start_character":12,"end_line":308,"end_character":19},"updated":"2017-03-03 02:34:13.000000000","message":"Can we know from the message that the testcase fails because \"old_volume_id in attached_volume_ids\" or \n\"new_volume_id not in attached_volume_ids\" or both?","commit_id":"10f28de05028ee2f7725875dd8ec66e4a830417e"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"0aec298f8b026b6632477f4f228d09c4e804eed8","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                               for attachment in volume_attachments]"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        if int(time.time()) - start \u003e\u003d client.build_timeout:"},{"line_number":308,"context_line":"            message \u003d (\u0027Failed to swap old volume %s to new volume %s \u0027"},{"line_number":309,"context_line":"                       \u0027on server %s within the required time (%s s).\u0027 %"},{"line_number":310,"context_line":"                       (old_volume_id, new_volume_id, server_id,"},{"line_number":311,"context_line":"                        client.build_timeout))"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_1b02923d","line":308,"range":{"start_line":308,"start_character":12,"end_line":308,"end_character":19},"in_reply_to":"ba2be162_f444f31b","updated":"2017-03-03 06:31:45.000000000","message":"It will be added in next patch, thank you!","commit_id":"10f28de05028ee2f7725875dd8ec66e4a830417e"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"e5ee81b62b973dfd50ad8c5b10ea58b87994dd05","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                       \u0027(current %(old_vol_bdm_status)s) to new volume \u0027"},{"line_number":313,"context_line":"                       \u0027%(new_volume_id)s (current %(new_vol_bdm_status)s) \u0027"},{"line_number":314,"context_line":"                       \u0027on server %(server_id)s within the required time \u0027"},{"line_number":315,"context_line":"                       \u0027(%(timeout)s)\u0027 %"},{"line_number":316,"context_line":"                       {\u0027old_volume_id\u0027: old_volume_id,"},{"line_number":317,"context_line":"                        \u0027old_vol_bdm_status\u0027: old_vol_bdm_status,"},{"line_number":318,"context_line":"                        \u0027new_volume_id\u0027: new_volume_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba2be162_b44ef46c","line":315,"updated":"2017-03-03 07:19:11.000000000","message":"missing \" s\"","commit_id":"f8212ae4bdb4a7c18f787562d2c9dd41b03546d5"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"158ba27e06c02ec2244c60c6da39945543d77712","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                       \u0027(current %(old_vol_bdm_status)s) to new volume \u0027"},{"line_number":313,"context_line":"                       \u0027%(new_volume_id)s (current %(new_vol_bdm_status)s) \u0027"},{"line_number":314,"context_line":"                       \u0027on server %(server_id)s within the required time \u0027"},{"line_number":315,"context_line":"                       \u0027(%(timeout)s)\u0027 %"},{"line_number":316,"context_line":"                       {\u0027old_volume_id\u0027: old_volume_id,"},{"line_number":317,"context_line":"                        \u0027old_vol_bdm_status\u0027: old_vol_bdm_status,"},{"line_number":318,"context_line":"                        \u0027new_volume_id\u0027: new_volume_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba2be162_0955e5f8","line":315,"in_reply_to":"ba2be162_b44ef46c","updated":"2017-03-03 10:32:09.000000000","message":"Done","commit_id":"f8212ae4bdb4a7c18f787562d2c9dd41b03546d5"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"1e757d4720d128122050b7f05f0faef4c672807d","unresolved":false,"context_lines":[{"line_number":286,"context_line":"    return body"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"def wait_for_server_volume_swap(client, server_id, old_volume_id,"},{"line_number":290,"context_line":"                                new_volume_id):"},{"line_number":291,"context_line":"    \"\"\"Waits for a server to swap the old volume to a new one.\"\"\""},{"line_number":292,"context_line":"    volume_attachments \u003d client.list_volume_attachments("}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_4d80edc0","line":289,"updated":"2017-03-21 09:41:00.000000000","message":"That function should be in the test_volume_swap.py file. It\u0027s very unlikely that this function is going to be reused so no need to put it in a \"common place\". The waiters.py file is too big already.","commit_id":"6c853c7211843a3b76db8e87a0a099c1187f6d7b"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"ccf5c09bfdf4527ef127bd8b721459006d5ac16f","unresolved":false,"context_lines":[{"line_number":286,"context_line":"    return body"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"def wait_for_server_volume_swap(client, server_id, old_volume_id,"},{"line_number":290,"context_line":"                                new_volume_id):"},{"line_number":291,"context_line":"    \"\"\"Waits for a server to swap the old volume to a new one.\"\"\""},{"line_number":292,"context_line":"    volume_attachments \u003d client.list_volume_attachments("}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_f5323bf1","line":289,"in_reply_to":"1a1ced50_4d80edc0","updated":"2017-03-21 11:10:35.000000000","message":"Ok, it will be moved to test_volume_swap.py as a private function.","commit_id":"6c853c7211843a3b76db8e87a0a099c1187f6d7b"}]}
