)]}'
{"tempest/api/image/v2/admin/test_images.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4d9af6a43b8f4bb3096e540daa1d7fe33352f0fa","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":111,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # TODO add some waiting method to complete the copy"},{"line_number":114,"context_line":"        time.sleep(200)"},{"line_number":115,"context_line":"        # Get the store info to check if image is copied to"},{"line_number":116,"context_line":"        # all the stores."}],"source_content_type":"text/x-python","patch_set":7,"id":"bf51134e_2eaa3584","line":113,"updated":"2020-07-23 17:46:02.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"2c9cb7f8b1c91a464fa606aefec9f6c231a9f823"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b2e6c4d9eb371c6a15425602c85b20f4a131d8ff","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":111,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # TODO add some waiting method to complete the copy"},{"line_number":114,"context_line":"        time.sleep(200)"},{"line_number":115,"context_line":"        # Get the store info to check if image is copied to"},{"line_number":116,"context_line":"        # all the stores."}],"source_content_type":"text/x-python","patch_set":8,"id":"bf51134e_3dab851e","line":113,"updated":"2020-07-24 00:04:03.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"e80f77388c0139fdb0241f44ff5b0ca1099d371b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"283ca372be9eeaaf965d9363b2bee133f21d9fb1","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":111,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # TODO add some waiting method to complete the copy"},{"line_number":114,"context_line":"        time.sleep(200)"},{"line_number":115,"context_line":"        # Get the store info to check if image is copied to"},{"line_number":116,"context_line":"        # all the stores."}],"source_content_type":"text/x-python","patch_set":10,"id":"9f560f44_26bc88ba","line":113,"updated":"2020-07-24 20:15:35.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"01d8d48d9c6d23650581c91b604c0e1ac3d29b0a"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3db2b3c028758d223ab3b006cdde239ec3a99481","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Wait for copy to finished on all stores."},{"line_number":116,"context_line":"        failed_store \u003d waiters.wait_and_status_copy_on_all_stores("},{"line_number":117,"context_line":"            self.client, image[\u0027id\u0027])"},{"line_number":118,"context_line":"        # Assert if copy is failed on any store."},{"line_number":119,"context_line":"        self.assertEqual(0, len(failed_store), str(failed_store))"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_dbbd0c03","line":116,"range":{"start_line":116,"start_character":23,"end_line":116,"end_character":65},"updated":"2020-08-04 10:26:56.000000000","message":"this method is not returning anything","commit_id":"8431e87ab83fa7aa18cf81ee03200928bee75b60"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e354bc68cb231151beec29f2d582dfd4472a6dc9","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        file_content \u003d data_utils.random_bytes()"},{"line_number":102,"context_line":"        image_file \u003d six.BytesIO(file_content)"},{"line_number":103,"context_line":"        self.client.store_image_file(image[\u0027id\u0027], image_file)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        body \u003d self.client.show_image(image[\u0027id\u0027])"},{"line_number":106,"context_line":"        self.assertEqual(image[\u0027id\u0027], body[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_5cb6b6fa","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":48},"updated":"2020-08-27 15:09:05.000000000","message":"just for curiosity, why we are not using import workflow here?","commit_id":"6f0d0a647b67dc6e1a6b9ba6d6613567910acee0"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"37042d87e54616583a3dc5cd6ce9af509174e478","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        body \u003d self.client.show_image(image[\u0027id\u0027])"},{"line_number":106,"context_line":"        self.assertEqual(image[\u0027id\u0027], body[\u0027id\u0027])"},{"line_number":107,"context_line":"        self.assertEqual(1024, body.get(\u0027size\u0027))"},{"line_number":108,"context_line":"        self.assertEqual(\u0027active\u0027, body[\u0027status\u0027])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Copy image to all the stores. In case of all_stores request"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_dc07d916","line":107,"range":{"start_line":107,"start_character":25,"end_line":107,"end_character":29},"updated":"2020-10-07 14:14:33.000000000","message":"Nit: Can we make this `len(file_content)` instead? Or add a comment about this size?\nThe default size of data_utils.random_byte() is now 1024 and I don\u0027t think we\u0027ll change the default. But I feel it\u0027s a bit unclear if people don\u0027t know the default value.","commit_id":"42f338412cd6857e040bc37830ed40fce20b7108"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f56e509cce110a166d7bd4f12e7c2f043438961d","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        body \u003d self.client.show_image(image[\u0027id\u0027])"},{"line_number":106,"context_line":"        self.assertEqual(image[\u0027id\u0027], body[\u0027id\u0027])"},{"line_number":107,"context_line":"        self.assertEqual(1024, body.get(\u0027size\u0027))"},{"line_number":108,"context_line":"        self.assertEqual(\u0027active\u0027, body[\u0027status\u0027])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Copy image to all the stores. In case of all_stores request"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_b17799d1","line":107,"range":{"start_line":107,"start_character":25,"end_line":107,"end_character":29},"in_reply_to":"9f560f44_dc07d916","updated":"2020-10-08 16:01:11.000000000","message":"sure, I will do it in follow up","commit_id":"42f338412cd6857e040bc37830ed40fce20b7108"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"98cec3256e54d6c1dc56cd76b90700bade8865f0","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        available_stores \u003d self.get_available_stores()"},{"line_number":82,"context_line":"        available_import_methods \u003d self.client.info_import()["},{"line_number":83,"context_line":"            \u0027import-methods\u0027][\u0027value\u0027]"},{"line_number":84,"context_line":"        # NOTE(gmann): Skip if copy-image import method and mutlistore"},{"line_number":85,"context_line":"        # are not available."},{"line_number":86,"context_line":"        if (\u0027copy-image\u0027 not in available_import_methods or"},{"line_number":87,"context_line":"            not available_stores):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_12eaa79e","line":84,"range":{"start_line":84,"start_character":60,"end_line":84,"end_character":70},"updated":"2020-10-11 00:00:04.000000000","message":"nit: multistore","commit_id":"8f9ff397eaa548cff336073fe70292a266f8eee6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cea73545faa5a98e5b9bdc0b9c0893b2ff66437e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        available_stores \u003d self.get_available_stores()"},{"line_number":82,"context_line":"        available_import_methods \u003d self.client.info_import()["},{"line_number":83,"context_line":"            \u0027import-methods\u0027][\u0027value\u0027]"},{"line_number":84,"context_line":"        # NOTE(gmann): Skip if copy-image import method and mutlistore"},{"line_number":85,"context_line":"        # are not available."},{"line_number":86,"context_line":"        if (\u0027copy-image\u0027 not in available_import_methods or"},{"line_number":87,"context_line":"            not available_stores):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f6b1bfe_1ca55db6","line":84,"range":{"start_line":84,"start_character":60,"end_line":84,"end_character":70},"in_reply_to":"9f560f44_12eaa79e","updated":"2020-10-13 14:23:14.000000000","message":"Done","commit_id":"8f9ff397eaa548cff336073fe70292a266f8eee6"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"98cec3256e54d6c1dc56cd76b90700bade8865f0","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # Copy image to all the stores. In case of all_stores request"},{"line_number":111,"context_line":"        # glance will skip the stores where image is already available."},{"line_number":112,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":113,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Wait for copy to finished on all stores."},{"line_number":116,"context_line":"        failed_store \u003d waiters.wait_for_image_copied_to_stores("}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_522d3ffb","line":113,"updated":"2020-10-11 00:00:04.000000000","message":"Glance API: If body of your request contains all_stores_must_succeed (default to True) and an error occurs during the copying in at least one store, the request will be rejected, the data will be deleted from the new stores where copying is done (not staging), and the state of the image remains the same.\n\nShould we pass `all_stores_must_succeed\u003dTrue` here explicity?","commit_id":"8f9ff397eaa548cff336073fe70292a266f8eee6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"5bef5d5adff5d46dcfeecf0753e2c1418c7628ac","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # Copy image to all the stores. In case of all_stores request"},{"line_number":111,"context_line":"        # glance will skip the stores where image is already available."},{"line_number":112,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":113,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Wait for copy to finished on all stores."},{"line_number":116,"context_line":"        failed_store \u003d waiters.wait_for_image_copied_to_stores("}],"source_content_type":"text/x-python","patch_set":20,"id":"7f6b1bfe_1c99dd1e","line":113,"in_reply_to":"7f6b1bfe_fc7501fc","updated":"2020-10-13 14:28:08.000000000","message":"let\u0027s pass it False as L119 assert fail test if it partially success with failed stores.\n\nwe can add another test with all_stores_must_succeed\u003dTrue which need a different waiting mechanism.","commit_id":"8f9ff397eaa548cff336073fe70292a266f8eee6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cea73545faa5a98e5b9bdc0b9c0893b2ff66437e","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # Copy image to all the stores. In case of all_stores request"},{"line_number":111,"context_line":"        # glance will skip the stores where image is already available."},{"line_number":112,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":113,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Wait for copy to finished on all stores."},{"line_number":116,"context_line":"        failed_store \u003d waiters.wait_for_image_copied_to_stores("}],"source_content_type":"text/x-python","patch_set":20,"id":"7f6b1bfe_fc7501fc","line":113,"in_reply_to":"9f560f44_522d3ffb","updated":"2020-10-13 14:23:14.000000000","message":"yeah we can explicitly pass it for better read of what test is doing.","commit_id":"8f9ff397eaa548cff336073fe70292a266f8eee6"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"98cec3256e54d6c1dc56cd76b90700bade8865f0","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Wait for copy to finished on all stores."},{"line_number":116,"context_line":"        failed_store \u003d waiters.wait_for_image_copied_to_stores("},{"line_number":117,"context_line":"            self.client, image[\u0027id\u0027])"},{"line_number":118,"context_line":"        # Assert if copy is failed on any store."},{"line_number":119,"context_line":"        self.assertEqual(0, len(failed_store), str(failed_store))"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_32ed2bb8","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":20},"updated":"2020-10-11 00:00:04.000000000","message":"nit: failed_stores since it\u0027s a list of stores.","commit_id":"8f9ff397eaa548cff336073fe70292a266f8eee6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cea73545faa5a98e5b9bdc0b9c0893b2ff66437e","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Wait for copy to finished on all stores."},{"line_number":116,"context_line":"        failed_store \u003d waiters.wait_for_image_copied_to_stores("},{"line_number":117,"context_line":"            self.client, image[\u0027id\u0027])"},{"line_number":118,"context_line":"        # Assert if copy is failed on any store."},{"line_number":119,"context_line":"        self.assertEqual(0, len(failed_store), str(failed_store))"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f6b1bfe_7c98d169","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":20},"in_reply_to":"9f560f44_32ed2bb8","updated":"2020-10-13 14:23:14.000000000","message":"Done","commit_id":"8f9ff397eaa548cff336073fe70292a266f8eee6"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"98cec3256e54d6c1dc56cd76b90700bade8865f0","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        failed_store \u003d waiters.wait_for_image_copied_to_stores("},{"line_number":117,"context_line":"            self.client, image[\u0027id\u0027])"},{"line_number":118,"context_line":"        # Assert if copy is failed on any store."},{"line_number":119,"context_line":"        self.assertEqual(0, len(failed_store), str(failed_store))"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_722843ed","line":119,"range":{"start_line":119,"start_character":47,"end_line":119,"end_character":64},"updated":"2020-10-11 00:00:04.000000000","message":"nit: Maybe a more informative message here like: \"Failed to copy the following stores: %s\" % str(failed_stores)","commit_id":"8f9ff397eaa548cff336073fe70292a266f8eee6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cea73545faa5a98e5b9bdc0b9c0893b2ff66437e","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        failed_store \u003d waiters.wait_for_image_copied_to_stores("},{"line_number":117,"context_line":"            self.client, image[\u0027id\u0027])"},{"line_number":118,"context_line":"        # Assert if copy is failed on any store."},{"line_number":119,"context_line":"        self.assertEqual(0, len(failed_store), str(failed_store))"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f6b1bfe_bca1c998","line":119,"range":{"start_line":119,"start_character":47,"end_line":119,"end_character":64},"in_reply_to":"9f560f44_722843ed","updated":"2020-10-13 14:23:14.000000000","message":"Done","commit_id":"8f9ff397eaa548cff336073fe70292a266f8eee6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4628fe5363db97b6198a12bb6f9a61f97eeb94cb","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        image \u003d self.create_image(name\u003dimage_name,"},{"line_number":95,"context_line":"                                  container_format\u003dcontainer_format,"},{"line_number":96,"context_line":"                                  disk_format\u003ddisk_format,"},{"line_number":97,"context_line":"                                  visibility\u003d\u0027private\u0027,"},{"line_number":98,"context_line":"                                  ramdisk_id\u003duuid)"},{"line_number":99,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1f621f24_4751a7d8","line":97,"range":{"start_line":97,"start_character":32,"end_line":97,"end_character":55},"updated":"2020-10-29 15:38:42.000000000","message":"with the overridden policy in nova-ceph-multistore job in nova[1] we need to create the public image here otherwise it fail[2]. need to check with dan if we can remove the policy overridden now?\n\n[1] https://github.com/openstack/nova/blob/7dcc4cfea7da2ef1163e0a65618cb784f5159c6d/playbooks/ceph/glance-copy-policy.yaml#L10\n\n[2] https://b31d1e5b497fac7fbc3e-0b4bc22ebd171c68db2aedee635a4440.ssl.cf1.rackcdn.com/760128/1/check/nova-ceph-multistore/9f08f36/testr_results.html","commit_id":"3180bbd6f745c77d08acd6ed6543037da5849175"}],"tempest/api/image/v2/test_images.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ab24cf47a8869b8e1d992d46cfb6d6a2faef61d2","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self._test_image_import(\u0027web-download\u0027)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"class ImportCopyImagesTest(base.BaseV2ImageAdminTest):"},{"line_number":113,"context_line":"    \"\"\"Here we test the import copy-image operations\"\"\""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_dc76e13e","line":112,"updated":"2020-07-23 04:14:31.000000000","message":"pep8: T115: All admin tests should exist under admin path.","commit_id":"1e6c4f45f4b5b28c885df1cbe437e3e9d9fe3af0"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"807916ca8b1e88ce4746c0a6fa903673b21df26c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            \u0027import-methods\u0027][\u0027value\u0027]"},{"line_number":128,"context_line":"        # NOTE(gmann): Skip if copy-image import method and mutlistore"},{"line_number":129,"context_line":"        # are not available."},{"line_number":130,"context_line":"        if (\u0027copy-image\u0027 not in available_import_methods or"},{"line_number":131,"context_line":"            not available_stores):"},{"line_number":132,"context_line":"            raise self.skipException(\u0027Either copy-image import method or \u0027"},{"line_number":133,"context_line":"                                     \u0027multistore is not available\u0027)"},{"line_number":134,"context_line":"        if available_stores:"},{"line_number":135,"context_line":"            available_stores_ids \u003d map(lambda x: x[\u0027id\u0027], available_stores)"},{"line_number":136,"context_line":"        uuid \u003d data_utils.rand_uuid()"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_02d5921b","line":133,"range":{"start_line":130,"start_character":8,"end_line":133,"end_character":67},"updated":"2020-07-23 07:32:36.000000000","message":"what is the use of def skip_checks(cls) if we have this?","commit_id":"1e6c4f45f4b5b28c885df1cbe437e3e9d9fe3af0"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ef52b41c21c31d926379653dc59883c1adf87af1","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            \u0027import-methods\u0027][\u0027value\u0027]"},{"line_number":128,"context_line":"        # NOTE(gmann): Skip if copy-image import method and mutlistore"},{"line_number":129,"context_line":"        # are not available."},{"line_number":130,"context_line":"        if (\u0027copy-image\u0027 not in available_import_methods or"},{"line_number":131,"context_line":"            not available_stores):"},{"line_number":132,"context_line":"            raise self.skipException(\u0027Either copy-image import method or \u0027"},{"line_number":133,"context_line":"                                     \u0027multistore is not available\u0027)"},{"line_number":134,"context_line":"        if available_stores:"},{"line_number":135,"context_line":"            available_stores_ids \u003d map(lambda x: x[\u0027id\u0027], available_stores)"},{"line_number":136,"context_line":"        uuid \u003d data_utils.rand_uuid()"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_9ca57e4a","line":133,"range":{"start_line":130,"start_character":8,"end_line":133,"end_character":67},"in_reply_to":"bf51134e_02d5921b","updated":"2020-07-23 13:46:35.000000000","message":"skip_checks can skip early based on config if test need some API interaction to skip that has to be done in test itself as clients are not available in skip_checks","commit_id":"1e6c4f45f4b5b28c885df1cbe437e3e9d9fe3af0"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"807916ca8b1e88ce4746c0a6fa903673b21df26c","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        # glance will skip the stores where image is already available."},{"line_number":158,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":159,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":160,"context_line":"        self.client.wait_for_resource_activation(image[\u0027id\u0027])"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        # Get the store info to check if image is copied to"},{"line_number":163,"context_line":"        # all the stores."}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_82c9a27a","line":160,"range":{"start_line":160,"start_character":8,"end_line":160,"end_character":61},"updated":"2020-07-23 07:32:36.000000000","message":"This method will not be useful here as we perform copy image operation on active image only. This method will return immediately and will cause failure if image is not copied to all stores.\n\nIMO for operations like import image in multiple stores or copy-image in multiple stores we should write new method which will check the special property \u0027os_glance_importing_to_stores\u0027 is empty or not. (Or something like that)","commit_id":"1e6c4f45f4b5b28c885df1cbe437e3e9d9fe3af0"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ef52b41c21c31d926379653dc59883c1adf87af1","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        # glance will skip the stores where image is already available."},{"line_number":158,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":159,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":160,"context_line":"        self.client.wait_for_resource_activation(image[\u0027id\u0027])"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        # Get the store info to check if image is copied to"},{"line_number":163,"context_line":"        # all the stores."}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_dc641624","line":160,"range":{"start_line":160,"start_character":8,"end_line":160,"end_character":61},"in_reply_to":"bf51134e_82c9a27a","updated":"2020-07-23 13:46:35.000000000","message":"ok, that make sense thanks.","commit_id":"1e6c4f45f4b5b28c885df1cbe437e3e9d9fe3af0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ab24cf47a8869b8e1d992d46cfb6d6a2faef61d2","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        if \u0027stores\u0027 in body:"},{"line_number":168,"context_line":"            image_stores \u003d body[\u0027stores\u0027]"},{"line_number":169,"context_line":"            stores_left \u003d set(available_stores_ids) - set(image_stores)"},{"line_number":170,"context_line":"            self.assertTrue(len(stores_to_copy), len(stores_left))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"class BasicOperationsImagesTest(base.BaseV2ImageTest):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_bc716d47","line":170,"updated":"2020-07-23 04:14:31.000000000","message":"pep8: F821 undefined name \u0027stores_to_copy\u0027","commit_id":"1e6c4f45f4b5b28c885df1cbe437e3e9d9fe3af0"}],"tempest/common/waiters.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3db2b3c028758d223ab3b006cdde239ec3a99481","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    store_left \u003d []"},{"line_number":199,"context_line":"    while int(time.time()) - start \u003c client.build_timeout:"},{"line_number":200,"context_line":"        image \u003d client.show_image(image_id)"},{"line_number":201,"context_line":"        store_left \u003d image[\u0027os_glance_importing_to_stores\u0027]"},{"line_number":202,"context_line":"        if not store_left:"},{"line_number":203,"context_line":"            return image[\u0027os_glance_failed_import\u0027]"},{"line_number":204,"context_line":"        if image[\u0027status\u0027].lower() \u003d\u003d \u0027killed\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_1bd4a447","line":201,"range":{"start_line":201,"start_character":21,"end_line":201,"end_character":59},"updated":"2020-08-04 10:26:56.000000000","message":"also store will be removed from this property as soon as it is picked up by task for processing. So we are not sure that if this property is empty means last store has completed successfully.\n\nIMO get image returns another property named \u0027stores\u0027 which have actual store names where data is imported successfully. We should utilize that.","commit_id":"8431e87ab83fa7aa18cf81ee03200928bee75b60"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"980ce3bc2df3e5cda3c280b39a43bb3421fbeb3b","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    store_left \u003d []"},{"line_number":199,"context_line":"    while int(time.time()) - start \u003c client.build_timeout:"},{"line_number":200,"context_line":"        image \u003d client.show_image(image_id)"},{"line_number":201,"context_line":"        store_left \u003d image[\u0027os_glance_importing_to_stores\u0027]"},{"line_number":202,"context_line":"        if not store_left:"},{"line_number":203,"context_line":"            return image[\u0027os_glance_failed_import\u0027]"},{"line_number":204,"context_line":"        if image[\u0027status\u0027].lower() \u003d\u003d \u0027killed\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_5c57d601","line":201,"range":{"start_line":201,"start_character":21,"end_line":201,"end_character":59},"in_reply_to":"9f560f44_144c2e40","updated":"2020-08-27 14:56:09.000000000","message":"My bad, you are right about removal of store from the property os_glance_importing_to_stores after completion of import process.","commit_id":"8431e87ab83fa7aa18cf81ee03200928bee75b60"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5e21053ed69a5dbb9ddf0777d8e848ab2442aa34","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    store_left \u003d []"},{"line_number":199,"context_line":"    while int(time.time()) - start \u003c client.build_timeout:"},{"line_number":200,"context_line":"        image \u003d client.show_image(image_id)"},{"line_number":201,"context_line":"        store_left \u003d image[\u0027os_glance_importing_to_stores\u0027]"},{"line_number":202,"context_line":"        if not store_left:"},{"line_number":203,"context_line":"            return image[\u0027os_glance_failed_import\u0027]"},{"line_number":204,"context_line":"        if image[\u0027status\u0027].lower() \u003d\u003d \u0027killed\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_144c2e40","line":201,"range":{"start_line":201,"start_character":21,"end_line":201,"end_character":59},"in_reply_to":"9f560f44_1bd4a447","updated":"2020-08-26 13:56:24.000000000","message":"I\u0027m not sure what you mean here -- we add it to importing_stores during the task creation process, and we remove it when ImportToStore is complete. I agree that waiting for it to be in stores (or failed_import) is the right approach, but I\u0027m not sure this is as wrong as you describe.","commit_id":"8431e87ab83fa7aa18cf81ee03200928bee75b60"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"49fa0964680675c89416a40d7b42796ba6da9749","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    store_left \u003d []"},{"line_number":199,"context_line":"    while int(time.time()) - start \u003c client.build_timeout:"},{"line_number":200,"context_line":"        image \u003d client.show_image(image_id)"},{"line_number":201,"context_line":"        store_left \u003d image[\u0027os_glance_importing_to_stores\u0027]"},{"line_number":202,"context_line":"        if not store_left:"},{"line_number":203,"context_line":"            return image[\u0027os_glance_failed_import\u0027]"},{"line_number":204,"context_line":"        if image[\u0027status\u0027].lower() \u003d\u003d \u0027killed\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_d4c56d3f","line":201,"range":{"start_line":201,"start_character":21,"end_line":201,"end_character":59},"in_reply_to":"9f560f44_5aecf18e","updated":"2020-08-28 13:57:00.000000000","message":"Yeah, and it\u0027s failing before the task starts running, but glance should be setting this value before the import API call returns. So.. something isn\u0027t right.","commit_id":"8431e87ab83fa7aa18cf81ee03200928bee75b60"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0aae0e383c8d2376c14e3601f068227c7e25146e","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    store_left \u003d []"},{"line_number":199,"context_line":"    while int(time.time()) - start \u003c client.build_timeout:"},{"line_number":200,"context_line":"        image \u003d client.show_image(image_id)"},{"line_number":201,"context_line":"        store_left \u003d image[\u0027os_glance_importing_to_stores\u0027]"},{"line_number":202,"context_line":"        if not store_left:"},{"line_number":203,"context_line":"            return image[\u0027os_glance_failed_import\u0027]"},{"line_number":204,"context_line":"        if image[\u0027status\u0027].lower() \u003d\u003d \u0027killed\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_5aecf18e","line":201,"range":{"start_line":201,"start_character":21,"end_line":201,"end_character":59},"in_reply_to":"9f560f44_5c57d601","updated":"2020-08-27 23:12:27.000000000","message":"yeah but seems like this attribute was not present in API response when it failed.","commit_id":"8431e87ab83fa7aa18cf81ee03200928bee75b60"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f40e4be52ac4c61653e16eb79ff477637a4d9d7d","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    store_left \u003d []"},{"line_number":199,"context_line":"    while int(time.time()) - start \u003c client.build_timeout:"},{"line_number":200,"context_line":"        image \u003d client.show_image(image_id)"},{"line_number":201,"context_line":"        store_left \u003d image[\u0027os_glance_importing_to_stores\u0027]"},{"line_number":202,"context_line":"        if not store_left:"},{"line_number":203,"context_line":"            return image[\u0027os_glance_failed_import\u0027]"},{"line_number":204,"context_line":"        if image[\u0027status\u0027].lower() \u003d\u003d \u0027killed\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_34e2e9a1","line":201,"range":{"start_line":201,"start_character":21,"end_line":201,"end_character":59},"in_reply_to":"9f560f44_d4c56d3f","updated":"2020-08-28 14:06:41.000000000","message":"Apparently get_flow() runs async after the API call, which I never realized. That\u0027s actually really problematic for clients for exactly this reason and I had made assumptions elsewhere that it was synchronous. I know the argument will be \"well, it\u0027s a 202 so nothing needs to have been done before the api call returns\" but it adds to the growing ambiguity that a client has to deal with. Anyway, I pushed a change and rechecked your test, so we\u0027ll see if that helps.","commit_id":"8431e87ab83fa7aa18cf81ee03200928bee75b60"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3db2b3c028758d223ab3b006cdde239ec3a99481","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        if image[\u0027status\u0027].lower() \u003d\u003d \u0027killed\u0027:"},{"line_number":205,"context_line":"            raise exceptions.ImageKilledException(image_id\u003dimage_id,"},{"line_number":206,"context_line":"                                                  status\u003dimage[\u0027status\u0027])"},{"line_number":207,"context_line":"        if image[\u0027status\u0027].lower() \u003d\u003d \u0027error\u0027:"},{"line_number":208,"context_line":"            raise exceptions.AddImageException(image_id\u003dimage_id)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        time.sleep(client.build_interval)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_bb8c987f","line":208,"range":{"start_line":207,"start_character":7,"end_line":208,"end_character":65},"updated":"2020-08-04 10:26:56.000000000","message":"AFAIK, we don\u0027t have error status for image.","commit_id":"8431e87ab83fa7aa18cf81ee03200928bee75b60"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"92c0ae675b4b3499495affea62e44469cf7032a5","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    raise lib_exc.TimeoutException(message)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def wait_and_status_copy_on_all_stores(client, image_id):"},{"line_number":213,"context_line":"    \"\"\"Waits for an image to be copied on all requested stores."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    The client should also have build_interval and build_timeout attributes."}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_86217852","line":212,"range":{"start_line":212,"start_character":4,"end_line":212,"end_character":38},"updated":"2020-10-08 19:41:14.000000000","message":"I find this name a little misleading - .._status_copy_on_all_stores - but it returns only the list of stores where the copy has failed, not all","commit_id":"42f338412cd6857e040bc37830ed40fce20b7108"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cfb780107f7c11e4d753863e2d256fdf62868905","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    raise lib_exc.TimeoutException(message)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def wait_and_status_copy_on_all_stores(client, image_id):"},{"line_number":213,"context_line":"    \"\"\"Waits for an image to be copied on all requested stores."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    The client should also have build_interval and build_timeout attributes."}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_9b5ffd73","line":212,"range":{"start_line":212,"start_character":4,"end_line":212,"end_character":38},"in_reply_to":"9f560f44_86217852","updated":"2020-10-09 18:37:19.000000000","message":"ok, let me change that and make it more generic to be used in https://review.opendev.org/#/c/749441/5","commit_id":"42f338412cd6857e040bc37830ed40fce20b7108"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"c040d8fb1309a0795097e1050810a056f5ee2a40","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    raise lib_exc.TimeoutException(message)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def wait_and_status_copy_on_all_stores(client, image_id):"},{"line_number":213,"context_line":"    \"\"\"Waits for an image to be copied on all requested stores."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    The client should also have build_interval and build_timeout attributes."}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_1418d7ca","line":212,"range":{"start_line":212,"start_character":4,"end_line":212,"end_character":38},"in_reply_to":"9f560f44_9b5ffd73","updated":"2020-10-10 13:58:11.000000000","message":"thanks","commit_id":"42f338412cd6857e040bc37830ed40fce20b7108"}]}
