)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"afc04454f4764b653e52979ead6d927b534c79fc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Roman Podoliaka \u003crpodolyaka@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-24 19:25:10 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add a test case for rebuild of instances with volumes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Related-Bug: #1440762"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fa32b979_1d949d34","line":7,"updated":"2015-06-25 14:52:37.000000000","message":"Roman, please, extend the commit message.","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c70b0b09efbeb5fc7782fd6e32157f91e04dbf5a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Roman Podoliaka \u003crpodolyaka@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-24 19:25:10 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add a test case for rebuild of instances with volumes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Related-Bug: #1440762"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fa32b979_0b80acf6","line":7,"in_reply_to":"fa32b979_1d949d34","updated":"2015-06-26 09:55:26.000000000","message":"Done","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"}],"tempest/api/compute/servers/test_server_actions.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"f834e6b52766464a4d6565d6b3f6e03e2ac1a457","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        try:"},{"line_number":194,"context_line":"            self.test_rebuild_server()"},{"line_number":195,"context_line":"        finally:"},{"line_number":196,"context_line":"            self.client.detach_volume(self.server_id, volume[\u0027id\u0027])"},{"line_number":197,"context_line":"            self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027],"},{"line_number":198,"context_line":"                                                       \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dac4157f_78044abf","line":195,"updated":"2015-04-21 16:28:21.000000000","message":"Should you assert something on the \u0027volume\u0027 after the server is rebuilt ?  Like should the volume be attached ?","commit_id":"6509ad53582bc96b7df02407a6bbc63dce456bf7"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"da00ba4476a4fef256bd95282f0a34e223cd2270","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        try:"},{"line_number":194,"context_line":"            self.test_rebuild_server()"},{"line_number":195,"context_line":"        finally:"},{"line_number":196,"context_line":"            self.client.detach_volume(self.server_id, volume[\u0027id\u0027])"},{"line_number":197,"context_line":"            self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027],"},{"line_number":198,"context_line":"                                                       \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab921fb_4f20ca9b","line":195,"in_reply_to":"dac4157f_78044abf","updated":"2015-04-23 15:17:58.000000000","message":"Good point. will do!","commit_id":"6509ad53582bc96b7df02407a6bbc63dce456bf7"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"afc04454f4764b653e52979ead6d927b534c79fc","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self.client.start(self.server_id)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_a_volume_attached(self):"},{"line_number":196,"context_line":"        # create a new volume and attach it to the server"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_482d818d","line":193,"updated":"2015-06-25 14:52:37.000000000","message":"Gate tag was removed https://review.openstack.org/#/q/status:merged+project:openstack/tempest+branch:master+topic:smoke,n,z.","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c70b0b09efbeb5fc7782fd6e32157f91e04dbf5a","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self.client.start(self.server_id)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_a_volume_attached(self):"},{"line_number":196,"context_line":"        # create a new volume and attach it to the server"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_d724ad0f","line":193,"in_reply_to":"fa32b979_482d818d","updated":"2015-06-26 09:55:26.000000000","message":"Done","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"afc04454f4764b653e52979ead6d927b534c79fc","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_a_volume_attached(self):"},{"line_number":196,"context_line":"        # create a new volume and attach it to the server"},{"line_number":197,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"},{"line_number":198,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_28b7dd3a","line":195,"updated":"2015-06-25 14:52:37.000000000","message":"test_rebuild_server_with_a_volume_attached -\u003e test_rebuild_server_with_volume_attached","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c70b0b09efbeb5fc7782fd6e32157f91e04dbf5a","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_a_volume_attached(self):"},{"line_number":196,"context_line":"        # create a new volume and attach it to the server"},{"line_number":197,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"},{"line_number":198,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_971e25ba","line":195,"in_reply_to":"fa32b979_28b7dd3a","updated":"2015-06-26 09:55:26.000000000","message":"Done","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"afc04454f4764b653e52979ead6d927b534c79fc","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_a_volume_attached(self):"},{"line_number":196,"context_line":"        # create a new volume and attach it to the server"},{"line_number":197,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"},{"line_number":198,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        self.client.attach_volume(self.server_id, volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_28fa7d43","line":197,"updated":"2015-06-25 14:52:37.000000000","message":"You should add something like this:\n\n    self.addCleanup(self.volumes_client.delete_volume, volume[\u0027id\u0027])","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c70b0b09efbeb5fc7782fd6e32157f91e04dbf5a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_a_volume_attached(self):"},{"line_number":196,"context_line":"        # create a new volume and attach it to the server"},{"line_number":197,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"},{"line_number":198,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        self.client.attach_volume(self.server_id, volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_1a6c7ccf","line":197,"in_reply_to":"fa32b979_28fa7d43","updated":"2015-06-26 09:55:26.000000000","message":"Done","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"afc04454f4764b653e52979ead6d927b534c79fc","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"},{"line_number":198,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        self.client.attach_volume(self.server_id, volume[\u0027id\u0027])"},{"line_number":201,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027in-use\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_28911df1","line":200,"updated":"2015-06-25 14:52:37.000000000","message":"You should add something like this:\n\n    self.addCleanup(self.volumes_client.wait_for_volume_status, \n                    volume[\u0027id\u0027], \u0027available\u0027)\n    self.addCleanup(self.client.detach_volume, self.server_id, volume[\u0027id\u0027])","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c70b0b09efbeb5fc7782fd6e32157f91e04dbf5a","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"},{"line_number":198,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        self.client.attach_volume(self.server_id, volume[\u0027id\u0027])"},{"line_number":201,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027in-use\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_3a7140a9","line":200,"in_reply_to":"fa32b979_28911df1","updated":"2015-06-26 09:55:26.000000000","message":"Done","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"afc04454f4764b653e52979ead6d927b534c79fc","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        self.client.attach_volume(self.server_id, volume[\u0027id\u0027])"},{"line_number":201,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027in-use\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        try:"},{"line_number":204,"context_line":"            # run general rebuild test"},{"line_number":205,"context_line":"            self.test_rebuild_server()"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_6356665d","line":203,"updated":"2015-06-25 14:52:37.000000000","message":"Now we can drop try/finally block:\n\n    # run general rebuild test\n    self.test_rebuild_server()\n\n    # make sure the volume is attached to the instance after rebuild\n    vol_after_rebuild \u003d self.volumes_client.show_volume(volume[\u0027id\u0027])\n    self.assertEqual(\u0027in-use\u0027, vol_after_rebuild[\u0027status\u0027])\n    self.assertEqual(self.server_id, \n                     vol_after_rebuild[\u0027attachments\u0027][0][\u0027server_id\u0027])","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c70b0b09efbeb5fc7782fd6e32157f91e04dbf5a","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        self.client.attach_volume(self.server_id, volume[\u0027id\u0027])"},{"line_number":201,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027in-use\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        try:"},{"line_number":204,"context_line":"            # run general rebuild test"},{"line_number":205,"context_line":"            self.test_rebuild_server()"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_da6614ee","line":203,"in_reply_to":"fa32b979_6356665d","updated":"2015-06-26 09:55:26.000000000","message":"Done","commit_id":"49a57c2de493b50b57486fa860cd5c2557990763"},{"author":{"_account_id":16986,"name":"Shuquan Huang","email":"shuquan.huang@live.com","username":"shuquan"},"change_message_id":"973b10d5b1e6d81821b5d3587dc71e0b351f6110","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":194,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":195,"context_line":"        # create a new volume and attach it to the server"},{"line_number":196,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"},{"line_number":197,"context_line":"        self.addCleanup(self.volumes_client.delete_volume, volume[\u0027id\u0027])"},{"line_number":198,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_a3a2c049","line":196,"updated":"2015-07-07 14:13:13.000000000","message":"Will it be better to use a variable instead of 1? Just suggestion. :)","commit_id":"3febf35bad90cd9697d5d424dda5537510085b67"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"a02e072102792baeec71885a6b77c237e0f130de","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self.client.start(self.server_id)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @decorators.skip_because(bug\u003d\"1440762\")"},{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":196,"context_line":"        # FIXME(rpodolyaka): remove this hack when LP #1374508 is fixed"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_04976fec","line":193,"updated":"2015-07-09 16:02:37.000000000","message":"It\u0027s hard to judge if this test passed in the Gate since it is skipped.","commit_id":"e7a022afe6b9935404a6da159b33e8df2521b42f"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"e9a3c4d5ec176843436f85074415fa63dc0d06e1","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self.client.start(self.server_id)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @decorators.skip_because(bug\u003d\"1440762\")"},{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":196,"context_line":"        # FIXME(rpodolyaka): remove this hack when LP #1374508 is fixed"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_6b5c83ed","line":193,"in_reply_to":"9a41bdd9_22f9cc4d","updated":"2015-07-14 09:09:13.000000000","message":"I can\u0027t agree more :)\n\nI\u0027d love to remove this skip, but that would make -juno, -kilo jobs fail. I haven\u0027t found a way to skip the test only for Juno/Kilo in Tempest. Is there any?","commit_id":"e7a022afe6b9935404a6da159b33e8df2521b42f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6c950db7f43909c0f4c2d2ca0154e5bc68ef9f09","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self.client.start(self.server_id)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @decorators.skip_because(bug\u003d\"1440762\")"},{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":196,"context_line":"        # FIXME(rpodolyaka): remove this hack when LP #1374508 is fixed"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_ce635ddb","line":193,"in_reply_to":"9a41bdd9_6b5c83ed","updated":"2015-07-14 09:27:10.000000000","message":"Ideally, the patch should be merged into stable/juno and /stable kilo branches. after that, we can merge this patch.\n\nbut before that, is this bug already fixed on master branch?\nSince https://bugs.launchpad.net/nova/+bug/1440762 , the bug doesn\u0027t seem closed yet.","commit_id":"e7a022afe6b9935404a6da159b33e8df2521b42f"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"33bbeea3041c78edd7182733ff80d582903d062d","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self.client.start(self.server_id)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @decorators.skip_because(bug\u003d\"1440762\")"},{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":196,"context_line":"        # FIXME(rpodolyaka): remove this hack when LP #1374508 is fixed"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_40c243ea","line":193,"in_reply_to":"9a41bdd9_ce635ddb","updated":"2015-07-16 08:43:42.000000000","message":"It\u0027s not yet.\n\nOk. I will propose backports to juno and kilo and update the change to Tempest to not skip the test.\n\nThanks, Ken\u0027ichi!","commit_id":"e7a022afe6b9935404a6da159b33e8df2521b42f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"27795c78d5d7dc4c4817945f79ff29fb956d32c0","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        self.client.start(self.server_id)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @decorators.skip_because(bug\u003d\"1440762\")"},{"line_number":194,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":195,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":196,"context_line":"        # FIXME(rpodolyaka): remove this hack when LP #1374508 is fixed"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_22f9cc4d","line":193,"in_reply_to":"ba3cc151_04976fec","updated":"2015-07-14 02:06:22.000000000","message":"I agree with Jordan.\n\nThat is basic rule for adding tests to Tempest.\n\nIf merging skipped tests to Tempest, it is difficult to decide whether the original bug is fixed or the original test contains a bug after the bug is fixed on the lunchpad but the test fails.","commit_id":"e7a022afe6b9935404a6da159b33e8df2521b42f"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"a02e072102792baeec71885a6b77c237e0f130de","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027in-use\u0027)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # run general rebuild test"},{"line_number":213,"context_line":"        self.test_rebuild_server()"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        # make sure the volume is attached to the instance after rebuild"},{"line_number":216,"context_line":"        vol_after_rebuild \u003d self.volumes_client.show_volume(volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_bf3eccb5","line":213,"updated":"2015-07-09 16:02:37.000000000","message":"One note: it\u0027s the first time I see a test calling another test.","commit_id":"e7a022afe6b9935404a6da159b33e8df2521b42f"},{"author":{"_account_id":9152,"name":"Castulo J. Martinez","email":"castulo.martinez@intel.com","username":"cas"},"change_message_id":"08c646dd50a06bb21d519f519b7d01dda0341336","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027in-use\u0027)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # run general rebuild test"},{"line_number":213,"context_line":"        self.test_rebuild_server()"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        # make sure the volume is attached to the instance after rebuild"},{"line_number":216,"context_line":"        vol_after_rebuild \u003d self.volumes_client.show_volume(volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afc51ec_ebe5a8a8","line":213,"in_reply_to":"ba3cc151_bf3eccb5","updated":"2016-03-11 19:10:27.000000000","message":"But is this a valid thing to do though?  doesn\u0027t that goes against the tempest coding guides? https://github.com/openstack/tempest/blob/c3ccd11d170d19add106fec6b71cd7bbe7e4b184/HACKING.rst#test-cases-are-independent","commit_id":"e7a022afe6b9935404a6da159b33e8df2521b42f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"928dd1dfbca43391a191ac1023ebb61bb0cd52bc","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":218,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":219,"context_line":"        # FIXME(rpodolyaka): remove this hack when LP #1374508 is fixed"},{"line_number":220,"context_line":"        # (otherwise volume remains attached to the instance forever)"},{"line_number":221,"context_line":"        self.addCleanup(self.delete_server, self.server_id)"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_3ad4a845","line":219,"updated":"2015-08-19 20:56:39.000000000","message":"Nit: The normal format for this is\n\n# TODO(rpodolyaka):","commit_id":"1a1c2c2d7ac254477b774b7d13f68c68a4288e0d"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"a1fe48b651b7ad4b07bd6f62e1eead938fb2a717","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":218,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":219,"context_line":"        # FIXME(rpodolyaka): remove this hack when LP #1374508 is fixed"},{"line_number":220,"context_line":"        # (otherwise volume remains attached to the instance forever)"},{"line_number":221,"context_line":"        self.addCleanup(self.delete_server, self.server_id)"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_c86722e9","line":219,"in_reply_to":"fa1b9901_3ad4a845","updated":"2015-08-22 11:38:21.000000000","message":"Done","commit_id":"1a1c2c2d7ac254477b774b7d13f68c68a4288e0d"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"928dd1dfbca43391a191ac1023ebb61bb0cd52bc","unresolved":false,"context_lines":[{"line_number":218,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":219,"context_line":"        # FIXME(rpodolyaka): remove this hack when LP #1374508 is fixed"},{"line_number":220,"context_line":"        # (otherwise volume remains attached to the instance forever)"},{"line_number":221,"context_line":"        self.addCleanup(self.delete_server, self.server_id)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        # create a new volume and attach it to the server"},{"line_number":224,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_7eeadbad","line":221,"updated":"2015-08-19 20:56:39.000000000","message":"I\u0027m not sure I fully understand the implications of doing this. It seems like we\u0027re masking over a pretty serious bug if we have to delete the server to ensure the volume is properly detatched. I also think you need to consider that even if we fix this bug you\u0027ll have to backport the fix everywhere to make it behave \"correctly\".","commit_id":"1a1c2c2d7ac254477b774b7d13f68c68a4288e0d"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"a1fe48b651b7ad4b07bd6f62e1eead938fb2a717","unresolved":false,"context_lines":[{"line_number":218,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":219,"context_line":"        # FIXME(rpodolyaka): remove this hack when LP #1374508 is fixed"},{"line_number":220,"context_line":"        # (otherwise volume remains attached to the instance forever)"},{"line_number":221,"context_line":"        self.addCleanup(self.delete_server, self.server_id)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        # create a new volume and attach it to the server"},{"line_number":224,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_28f7bef6","line":221,"in_reply_to":"fa1b9901_7eeadbad","updated":"2015-08-22 11:38:21.000000000","message":"I completely agree with you that in general it\u0027s not a good idea to mask a bug with such work around, just to make the test pass.\n\nHowever this patch was about testing the rebuild of a server with a volume attached, which was completely broken, and now when it\u0027s fixed, we\u0027d really like to see it tested in the gate, so that we don\u0027t introduce a regression in the future.\n\nLP #1374508 referenced here, on the other hand, has very little to do with the original issue. It seems to be a nasty race condition within libvirt/qemu, which prevents the volumes from being detached properly (I left a comment to https://review.openstack.org/#/c/175067/ which tries to fix this). It has nothing to do with rebuild, it\u0027s just in this test we detach the volume right after the instance becomes active, and due to the nature of LP #1374508 it might possibly leave instance in the state when both Nova and Cinder think the volume is detached, while actually it is still used by the qemu process. As bad as it sounds, it\u0027s only reproduced in tests most of the times, as one usually does not immediately (literally :) ) detaches a volume from an instance he/she just booted.\n\nSo, for what it\u0027s worth, I\u0027d rather leave this hack here in order to proceed with the testing of rebuild in the gate, rather than wait till LP #1374508 is fixed properly.","commit_id":"1a1c2c2d7ac254477b774b7d13f68c68a4288e0d"},{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"dff0ca5be38a23f95958a2422cd7056a70274ff0","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.addCleanup(self.delete_server, self.server_id)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        # create a new volume and attach it to the server"},{"line_number":224,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"},{"line_number":225,"context_line":"        self.addCleanup(self.volumes_client.delete_volume, volume[\u0027id\u0027])"},{"line_number":226,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_f815cd9a","line":224,"updated":"2015-08-25 03:33:53.000000000","message":"CONF.volume.volume_size is best","commit_id":"990d045ea7c9eb2212ed2820d4bd7dab22c9188f"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"9e76b4b9fa855b7f74b0bd1f398644fe773d3176","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.addCleanup(self.delete_server, self.server_id)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        # create a new volume and attach it to the server"},{"line_number":224,"context_line":"        volume \u003d self.volumes_client.create_volume(size\u003d1)"},{"line_number":225,"context_line":"        self.addCleanup(self.volumes_client.delete_volume, volume[\u0027id\u0027])"},{"line_number":226,"context_line":"        self.volumes_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_248e322e","line":224,"in_reply_to":"fa1b9901_f815cd9a","updated":"2015-09-01 13:39:39.000000000","message":"Done","commit_id":"990d045ea7c9eb2212ed2820d4bd7dab22c9188f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c833f364e455deb2491e92e2e9f0d42723678266","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.assertEqual(new_image, rebuilt_image_id)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.client.start_server(self.server_id)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":216,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":217,"context_line":"        # create a new volume and attach it to the server"}],"source_content_type":"text/x-python","patch_set":17,"id":"9aed3d3a_eb4b4685","line":214,"updated":"2016-02-29 23:55:30.000000000","message":"This test requires volume service, so we need to put\n\n @test.services(\u0027volume\u0027)\n\nas its decorator.","commit_id":"e1a14137dc18289eec776f459058582946098a7b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8de00c719f9956edbeabf890aa988185021a2044","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.assertEqual(new_image, rebuilt_image_id)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.client.start_server(self.server_id)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":216,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":217,"context_line":"        # create a new volume and attach it to the server"}],"source_content_type":"text/x-python","patch_set":17,"id":"7af24918_7b3a0dcf","line":214,"in_reply_to":"7af24918_15a118aa","updated":"2016-03-01 15:31:16.000000000","message":"No, the services decorator can and is used everywhere. It is just a hard requirement for scenario tests (and enforced through hacking). This is because there isn\u0027t an inherent service in the test id already, so we need to tag the scenario tests to properly identify the services being used. If the skipif is just on a service boundary we should be using the proper decorator.\n\nKen\u0027ichi is correct the test requires a services decorator to tag this test as requiring cinder.","commit_id":"e1a14137dc18289eec776f459058582946098a7b"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"0895c12e7dfb938d3282b7bd72809474b7727aa0","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.assertEqual(new_image, rebuilt_image_id)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.client.start_server(self.server_id)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":216,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":217,"context_line":"        # create a new volume and attach it to the server"}],"source_content_type":"text/x-python","patch_set":17,"id":"7af24918_4c4ae484","line":214,"in_reply_to":"7af24918_7b3a0dcf","updated":"2016-03-01 20:18:33.000000000","message":"Thanks guys. Now I am aware of this :)","commit_id":"e1a14137dc18289eec776f459058582946098a7b"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"70da23d2bdbfec97b27187a743b8a8b21bd3f07f","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.assertEqual(new_image, rebuilt_image_id)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.client.start_server(self.server_id)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":216,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":217,"context_line":"        # create a new volume and attach it to the server"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afc51ec_c20426c8","line":214,"in_reply_to":"9aed3d3a_eb4b4685","updated":"2016-03-11 11:23:30.000000000","message":"Done","commit_id":"e1a14137dc18289eec776f459058582946098a7b"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"d0d884b2096e74ba7da1d0c800cbd6a874b971d6","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.assertEqual(new_image, rebuilt_image_id)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        self.client.start_server(self.server_id)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    @test.idempotent_id(\u0027b68bd8d6-855d-4212-b59b-2e704044dace\u0027)"},{"line_number":216,"context_line":"    def test_rebuild_server_with_volume_attached(self):"},{"line_number":217,"context_line":"        # create a new volume and attach it to the server"}],"source_content_type":"text/x-python","patch_set":17,"id":"7af24918_15a118aa","line":214,"in_reply_to":"9aed3d3a_eb4b4685","updated":"2016-03-01 15:16:55.000000000","message":"I always thought that we use such decorators only for scenario tests and in API tests we use something like \n\n\n@testtools.skipUnless(...) ot @testtools.skipIf(...)","commit_id":"e1a14137dc18289eec776f459058582946098a7b"}]}
