)]}'
{"nova/tests/fixtures.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0b5cfebb67c29284fd354ad3b1965019104108c5","unresolved":false,"context_lines":[{"line_number":1159,"context_line":"                return volume"},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"            # Check to see if the volume is attached."},{"line_number":1162,"context_line":"            for instance_uuid, volumes in self.attachments:"},{"line_number":1163,"context_line":"                if volume_id in volumes:"},{"line_number":1164,"context_line":"                    # The volume is attached."},{"line_number":1165,"context_line":"                    return {"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_b1188a75","line":1162,"range":{"start_line":1162,"start_character":42,"end_line":1162,"end_character":58},"updated":"2017-03-23 21:45:46.000000000","message":"This needs to be self.attachments.items().","commit_id":"d9cf4e729e0ff818e703ef4b87706df3fa4f7595"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e313c8f0ca9880d4102f6d0908a728268f876dcf","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"            else:"},{"line_number":1226,"context_line":"                for instance, volumes in self.attachments.items():"},{"line_number":1227,"context_line":"                    if volume_id in volumes:"},{"line_number":1228,"context_line":"                        volumes.remove(volume_id)"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":"        self.test.stub_out(\u0027nova.volume.cinder.API.detach\u0027, fake_detach)"},{"line_number":1231,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_31a91adf","line":1228,"updated":"2017-03-23 21:50:20.000000000","message":"we can break here","commit_id":"d63512b536ae24594bd1174f2caaae26431e659e"}],"nova/tests/functional/api/client.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e313c8f0ca9880d4102f6d0908a728268f876dcf","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                    raise OpenStackApiAuthorizationException(response\u003dresponse)"},{"line_number":192,"context_line":"                else:"},{"line_number":193,"context_line":"                    raise OpenStackApiException("},{"line_number":194,"context_line":"                        message\u003dresponse.text,"},{"line_number":195,"context_line":"                        response\u003dresponse)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_91834657","line":194,"updated":"2017-03-23 21:50:20.000000000","message":"This is because I was hitting 400s and not getting any actual error messages in the console output.","commit_id":"d63512b536ae24594bd1174f2caaae26431e659e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9c4456f8c8f2db6e6bca2f10337fe2b34906e954","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                    raise OpenStackApiAuthorizationException(response\u003dresponse)"},{"line_number":192,"context_line":"                else:"},{"line_number":193,"context_line":"                    raise OpenStackApiException("},{"line_number":194,"context_line":"                        message\u003dresponse.text,"},{"line_number":195,"context_line":"                        response\u003dresponse)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffe62b97_6c0d848f","line":194,"updated":"2017-03-24 00:48:23.000000000","message":"This broke some tests that are expecting the specific error message, which seems dumb.","commit_id":"27fc6e7351b10fa119e674f77e3f05f6dc1d21b3"}],"nova/tests/functional/regressions/test_bug_1675570.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e313c8f0ca9880d4102f6d0908a728268f876dcf","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self._wait_for_volume_attach(server_id, volume_id)"},{"line_number":152,"context_line":"        # Check to see that the fixture is tracking the server and volume"},{"line_number":153,"context_line":"        # attachment."},{"line_number":154,"context_line":"        LOG.info(\u0027Validating that volume %s is attached to server %s.\u0027,"},{"line_number":155,"context_line":"                 volume_id, server_id)"},{"line_number":156,"context_line":"        self.assertIn(volume_id, self.cinder.attachments[server_id])"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        # At this point the instance.host is no longer set, so deleting"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_d1e54e3a","line":155,"range":{"start_line":154,"start_character":8,"end_line":155,"end_character":38},"updated":"2017-03-23 21:50:20.000000000","message":"Move this above self._wait_for_volume_attach(server_id, volume_id).","commit_id":"d63512b536ae24594bd1174f2caaae26431e659e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e313c8f0ca9880d4102f6d0908a728268f876dcf","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        # At this point the instance.host is no longer set, so deleting"},{"line_number":159,"context_line":"        # the server will take the local delete path in the API."},{"line_number":160,"context_line":"        LOG.info(\u0027Deleting shelved-offloaded server.\u0027)"},{"line_number":161,"context_line":"        self._delete_server(server_id)"},{"line_number":162,"context_line":"        # Now wait for the server to be gone."},{"line_number":163,"context_line":"        self._wait_for_instance_delete(server_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_71d68252","line":160,"updated":"2017-03-23 21:50:20.000000000","message":"Put the server id in here.","commit_id":"d63512b536ae24594bd1174f2caaae26431e659e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c45ae741dbaea19d12ec78720c808637e40a909","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        LOG.info(\u0027Validating that volume %s was detached from server %s.\u0027,"},{"line_number":166,"context_line":"                 volume_id, server_id)"},{"line_number":167,"context_line":"        # When bug 1675570 is fixed, this should be assertNotIn."},{"line_number":168,"context_line":"        self.assertIn(volume_id, self.cinder.attachments[server_id])"}],"source_content_type":"text/x-python","patch_set":8,"id":"ffe62b97_0a876a11","line":168,"updated":"2017-03-28 09:34:55.000000000","message":"Its tempting to check for quota as well. I think we have some little bugs around there.","commit_id":"aac8c2d6e2fa0100ff1e9267c8722e3694c75fc9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4c09f7e3484d813f3f35738e437cc14432c20887","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        LOG.info(\u0027Validating that volume %s was detached from server %s.\u0027,"},{"line_number":166,"context_line":"                 volume_id, server_id)"},{"line_number":167,"context_line":"        # When bug 1675570 is fixed, this should be assertNotIn."},{"line_number":168,"context_line":"        self.assertIn(volume_id, self.cinder.attachments[server_id])"}],"source_content_type":"text/x-python","patch_set":8,"id":"dfeb2761_ba395c42","line":168,"in_reply_to":"ffe62b97_0a876a11","updated":"2017-03-31 18:24:08.000000000","message":"That was already covered in one of the other ocata regression fixes:\n\nhttps://github.com/openstack/nova/blob/master/nova/tests/functional/regressions/test_bug_1670627.py","commit_id":"aac8c2d6e2fa0100ff1e9267c8722e3694c75fc9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8dcfc5225cfc2044f36d6a2de816ee9fc13e9b45","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        while server[\u0027status\u0027] !\u003d status and timeout \u003c 10.0:"},{"line_number":76,"context_line":"            time.sleep(.1)"},{"line_number":77,"context_line":"            timeout +\u003d .1"},{"line_number":78,"context_line":"            server \u003d self.api.get_server(server_id)"},{"line_number":79,"context_line":"        if server[\u0027status\u0027] !\u003d status:"},{"line_number":80,"context_line":"            self.fail(\u0027Timed out waiting for server %s to have status: %s. \u0027"},{"line_number":81,"context_line":"                      \u0027Current status: %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":9,"id":"bff0334d_c869f125","line":78,"updated":"2017-04-06 14:17:54.000000000","message":"so you gonna call 100 times the API, correct ? Well, looks a bit huuuuuge, but meh.","commit_id":"3ae12fdc6f428fc500f5c234f03a8ffc8286e7ba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a175e10079c233c792a9bc43af6e186265b603bd","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        while server[\u0027status\u0027] !\u003d status and timeout \u003c 10.0:"},{"line_number":76,"context_line":"            time.sleep(.1)"},{"line_number":77,"context_line":"            timeout +\u003d .1"},{"line_number":78,"context_line":"            server \u003d self.api.get_server(server_id)"},{"line_number":79,"context_line":"        if server[\u0027status\u0027] !\u003d status:"},{"line_number":80,"context_line":"            self.fail(\u0027Timed out waiting for server %s to have status: %s. \u0027"},{"line_number":81,"context_line":"                      \u0027Current status: %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":9,"id":"bff0334d_78a99079","line":78,"in_reply_to":"bff0334d_48f5e156","updated":"2017-04-06 15:15:09.000000000","message":"This is pretty much all boilerplate copy/paste from other functional tests that are doing the same polling. At some point I want to pull all of these wait utility methods into a util module for functional tests, and at that point we can probably sort out the actual numbers.\n\nThese are functional tests, so they are fast, everything is faked out anyway, so we won\u0027t actually be hitting the timeouts unless something goes wrong.","commit_id":"3ae12fdc6f428fc500f5c234f03a8ffc8286e7ba"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b2c2347954d2303a7362b8f463c7944c3e3835c2","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        while server[\u0027status\u0027] !\u003d status and timeout \u003c 10.0:"},{"line_number":76,"context_line":"            time.sleep(.1)"},{"line_number":77,"context_line":"            timeout +\u003d .1"},{"line_number":78,"context_line":"            server \u003d self.api.get_server(server_id)"},{"line_number":79,"context_line":"        if server[\u0027status\u0027] !\u003d status:"},{"line_number":80,"context_line":"            self.fail(\u0027Timed out waiting for server %s to have status: %s. \u0027"},{"line_number":81,"context_line":"                      \u0027Current status: %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":9,"id":"bff0334d_eb4a6c7e","line":78,"in_reply_to":"bff0334d_78a99079","updated":"2017-04-06 15:47:04.000000000","message":"Yeah, I know. That just sounds to me pretty heavy and I\u0027d rather think of ways to callback, but let\u0027s not block that now for nitty things.","commit_id":"3ae12fdc6f428fc500f5c234f03a8ffc8286e7ba"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c37532203bbccea3bdb26511803a8b713eceee12","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        while server[\u0027status\u0027] !\u003d status and timeout \u003c 10.0:"},{"line_number":76,"context_line":"            time.sleep(.1)"},{"line_number":77,"context_line":"            timeout +\u003d .1"},{"line_number":78,"context_line":"            server \u003d self.api.get_server(server_id)"},{"line_number":79,"context_line":"        if server[\u0027status\u0027] !\u003d status:"},{"line_number":80,"context_line":"            self.fail(\u0027Timed out waiting for server %s to have status: %s. \u0027"},{"line_number":81,"context_line":"                      \u0027Current status: %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":9,"id":"bff0334d_48f5e156","line":78,"in_reply_to":"bff0334d_c869f125","updated":"2017-04-06 14:18:19.000000000","message":"gonna call *up to*","commit_id":"3ae12fdc6f428fc500f5c234f03a8ffc8286e7ba"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8dcfc5225cfc2044f36d6a2de816ee9fc13e9b45","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        timeout \u003d 0.0"},{"line_number":87,"context_line":"        while timeout \u003c 10.0:"},{"line_number":88,"context_line":"            try:"},{"line_number":89,"context_line":"                server \u003d self.api.get_server(server_id)"},{"line_number":90,"context_line":"            except client.OpenStackApiNotFoundException:"},{"line_number":91,"context_line":"                # the instance is gone so we\u0027re happy"},{"line_number":92,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":9,"id":"bff0334d_285cdd7c","line":89,"updated":"2017-04-06 14:17:54.000000000","message":"and again stressing 100 times...","commit_id":"3ae12fdc6f428fc500f5c234f03a8ffc8286e7ba"}]}
