)]}'
{"tempest/common/waiters.py":[{"author":{"_account_id":2976,"name":"Adalberto Medeiros","email":"adalbas@gmail.com","username":"adalbas"},"change_message_id":"058800706b1305ae0e5a93e2f453454d4143ce04","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Waits for a server to reach a given status.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def _get_task_state(body):"},{"line_number":31,"context_line":"        task_state \u003d body.get(\u0027OS-EXT-STS:task_state\u0027, None)"},{"line_number":32,"context_line":"        return task_state"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    # NOTE(afazekas): UNKNOWN status possible on ERROR"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FUb8%3D","line":31,"updated":"2013-09-06 13:10:24.000000000","message":"This does not work for XML, since the label is \u0027{http://docs.openstack.org/compute/ext/extended_status/api/v1.1}task_state\u0027","commit_id":"317c9757b2b9b34741d1c6283d5cc90de0f6da1f"},{"author":{"_account_id":7629,"name":"Shawn Hartsock","email":"hartsock@acm.org","username":"hartsocks"},"change_message_id":"efc877ca1ca5fd2c4aa8eca2024efd13533f3ec9","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    old_status \u003d server_status \u003d body[\u0027status\u0027]"},{"line_number":38,"context_line":"    old_task_state \u003d task_state \u003d _get_task_state(body)"},{"line_number":39,"context_line":"    start_time \u003d int(time.time())"},{"line_number":40,"context_line":"    while True:"},{"line_number":41,"context_line":"        # NOTE(afazekas): Now the BUILD status only reached"},{"line_number":42,"context_line":"        # between the UNKOWN-\u003eACTIVE transition."},{"line_number":43,"context_line":"        # TODO(afazekas): enumerate and validate the stable status set"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FLhA%3D","line":40,"updated":"2013-09-10 15:02:21.000000000","message":"I\u0027m sorry, maybe I\u0027m missing something. \n\nCould you explain to me how this loop can exit without hitting the time out if we didn\u0027t enter the loop with our exit values already set? (When I write things like this its because I\u0027ve edited code a few times and didn\u0027t catch the reason for the loop has evaporated between rapid edits following people\u0027s suggestions.)\n\nThe value of status and server_status don\u0027t appear to be written to at all between lines 41 and 56.\n\nUnless there\u0027s a shared memory trick with status and server_status this would be close to equivalent:\n\n    if status \u003d\u003d \u0027BUILD\u0027 and server_status !\u003d \u0027UNKNOWN\u0027:\n        return\n    if server_status \u003d\u003d status and ready_wait:\n         # lines skipped...\n\n    while True:\n           if server_status \u003d\u003d status and ready_wait:\n               time.sleep(CONFIG.compute.ready_wait)\n               # and this seems like a waste of CPU\n\n... and the while loop is a total waste and only has a sleep in it if the conditional passes... otherwise it runs noop as fast as the CPU can.","commit_id":"317c9757b2b9b34741d1c6283d5cc90de0f6da1f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"e1455813bf828673703617cac19414cd1e0336d0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    old_status \u003d server_status \u003d body[\u0027status\u0027]"},{"line_number":38,"context_line":"    old_task_state \u003d task_state \u003d _get_task_state(body)"},{"line_number":39,"context_line":"    start_time \u003d int(time.time())"},{"line_number":40,"context_line":"    while True:"},{"line_number":41,"context_line":"        # NOTE(afazekas): Now the BUILD status only reached"},{"line_number":42,"context_line":"        # between the UNKOWN-\u003eACTIVE transition."},{"line_number":43,"context_line":"        # TODO(afazekas): enumerate and validate the stable status set"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FLLs%3D","line":40,"in_reply_to":"AAAASn%2F%2FLSM%3D","updated":"2013-09-10 16:10:52.000000000","message":"ready_wait\u003dFalse not handled properly.","commit_id":"317c9757b2b9b34741d1c6283d5cc90de0f6da1f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"23995b6212402ed808cb5ab68f39bdd27e49171c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    old_status \u003d server_status \u003d body[\u0027status\u0027]"},{"line_number":38,"context_line":"    old_task_state \u003d task_state \u003d _get_task_state(body)"},{"line_number":39,"context_line":"    start_time \u003d int(time.time())"},{"line_number":40,"context_line":"    while True:"},{"line_number":41,"context_line":"        # NOTE(afazekas): Now the BUILD status only reached"},{"line_number":42,"context_line":"        # between the UNKOWN-\u003eACTIVE transition."},{"line_number":43,"context_line":"        # TODO(afazekas): enumerate and validate the stable status set"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FLSM%3D","line":40,"in_reply_to":"AAAASn%2F%2FLhA%3D","updated":"2013-09-10 15:50:04.000000000","message":"It exists at line 54.\nif str(task_state) \u003d\u003d \"None\":\n    return\n\nThe value updated at the end of the loop.\nThe initial value set before the loop.","commit_id":"317c9757b2b9b34741d1c6283d5cc90de0f6da1f"},{"author":{"_account_id":2976,"name":"Adalberto Medeiros","email":"adalbas@gmail.com","username":"adalbas"},"change_message_id":"058800706b1305ae0e5a93e2f453454d4143ce04","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if status \u003d\u003d \u0027BUILD\u0027 and server_status !\u003d \u0027UNKNOWN\u0027:"},{"line_number":45,"context_line":"            return"},{"line_number":46,"context_line":"        if server_status \u003d\u003d status and ready_wait:"},{"line_number":47,"context_line":"            if status \u003d\u003d \u0027BUILD\u0027:"},{"line_number":48,"context_line":"                return"},{"line_number":49,"context_line":"            # NOTE(afazekas): The instance is in \"ready for action state\""},{"line_number":50,"context_line":"            # when no task in progress"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FUbY%3D","line":47,"updated":"2013-09-06 13:10:24.000000000","message":"The only exit status in this loop is BUILD. What if the function is calling for a different status (ex: SAVING).","commit_id":"317c9757b2b9b34741d1c6283d5cc90de0f6da1f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"23995b6212402ed808cb5ab68f39bdd27e49171c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            # NOTE(afazekas): Converted to string bacuse of the XML"},{"line_number":52,"context_line":"            # responses"},{"line_number":53,"context_line":"            if str(task_state) \u003d\u003d \"None\":"},{"line_number":54,"context_line":"                return"},{"line_number":55,"context_line":"            # without state api extension 3 sec usually enough"},{"line_number":56,"context_line":"            time.sleep(CONFIG.compute.ready_wait)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FLR8%3D","line":54,"updated":"2013-09-10 15:50:04.000000000","message":"Normal exit.","commit_id":"317c9757b2b9b34741d1c6283d5cc90de0f6da1f"},{"author":{"_account_id":7629,"name":"Shawn Hartsock","email":"hartsock@acm.org","username":"hartsocks"},"change_message_id":"efc877ca1ca5fd2c4aa8eca2024efd13533f3ec9","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            # without state api extension 3 sec usually enough"},{"line_number":56,"context_line":"            time.sleep(CONFIG.compute.ready_wait)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        time.sleep(client.build_interval)"},{"line_number":59,"context_line":"        resp, body \u003d client.get_server(server_id)"},{"line_number":60,"context_line":"        server_status \u003d body[\u0027status\u0027]"},{"line_number":61,"context_line":"        task_state \u003d _get_task_state(body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FLc8%3D","line":58,"updated":"2013-09-10 15:02:21.000000000","message":"in general, this kind of sleep timing business bothers me but I\u0027m not sure I can tell you do do something better.","commit_id":"317c9757b2b9b34741d1c6283d5cc90de0f6da1f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1f727d968cf1b819d42cefb22118747f0fee30d2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        server_status \u003d body[\u0027status\u0027]"},{"line_number":64,"context_line":"        task_state \u003d _get_task_state(body)"},{"line_number":65,"context_line":"        if (server_status !\u003d old_status) or (task_state !\u003d old_task_state):"},{"line_number":66,"context_line":"            LOG.info(\u0027State transition \"%s\" \u003d\u003d\u003e \"%s\" after %d second wait\u0027,"},{"line_number":67,"context_line":"                     \u0027/\u0027.join((old_status, str(old_task_state))),"},{"line_number":68,"context_line":"                     \u0027/\u0027.join((server_status, str(task_state))),"},{"line_number":69,"context_line":"                     time.time() - start_time)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FApE%3D","line":66,"updated":"2013-09-13 15:55:53.000000000","message":"Won\u0027t this print out on failures at INFO? I\u0027m not sure that we want this on the console out. How about debug log level.","commit_id":"0abbc95f5a796874f9a94468d38846fc46ac6deb"}],"tempest/services/compute/__init__.py":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"cb87da35e9d0e62458fedb180e2bc0905d5dfdc1","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        #NOTE(afazekas): UNKNOWN status possible on ERROR"},{"line_number":39,"context_line":"        # or in a very early stage."},{"line_number":40,"context_line":"        resp, body \u003d client.get_server(server_id)"},{"line_number":41,"context_line":"        server_status \u003d body[\u0027status\u0027]"},{"line_number":42,"context_line":"        task_state \u003d _get_task_state(body)"},{"line_number":43,"context_line":"        start \u003d int(time.time())"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FpIo%3D","line":40,"updated":"2013-07-15 13:56:37.000000000","message":"do we really need lines from 40 to 42?","commit_id":"406a812ec6979209d0b17b6c5f856db84b12efa2"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"b5f22a519651726b9996453b127ee4ad24618e52","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        #NOTE(afazekas): UNKNOWN status possible on ERROR"},{"line_number":39,"context_line":"        # or in a very early stage."},{"line_number":40,"context_line":"        resp, body \u003d client.get_server(server_id)"},{"line_number":41,"context_line":"        server_status \u003d body[\u0027status\u0027]"},{"line_number":42,"context_line":"        task_state \u003d _get_task_state(body)"},{"line_number":43,"context_line":"        start \u003d int(time.time())"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2FabA%3D","line":40,"in_reply_to":"AAAAP3%2F%2FpIo%3D","updated":"2013-07-31 15:45:55.000000000","message":"I mean, it looks like by moving lines 64-67 in position 45, we don\u0027t need 40-42 anymore","commit_id":"406a812ec6979209d0b17b6c5f856db84b12efa2"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"cb87da35e9d0e62458fedb180e2bc0905d5dfdc1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            # between the UNKOWN-\u003eACTIVE transition."},{"line_number":47,"context_line":"            #TODO(afazekas): enumerate the stable status set"},{"line_number":48,"context_line":"            if status \u003d\u003d \u0027BUILD\u0027 and server_status !\u003d \u0027UNKNOWN\u0027:"},{"line_number":49,"context_line":"                return"},{"line_number":50,"context_line":"            if server_status \u003d\u003d status:"},{"line_number":51,"context_line":"                if status \u003d\u003d \u0027BUILD\u0027:"},{"line_number":52,"context_line":"                    return"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FpIM%3D","line":49,"updated":"2013-07-15 13:56:37.000000000","message":"why are we returning here? looks like a gray area","commit_id":"406a812ec6979209d0b17b6c5f856db84b12efa2"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"cb87da35e9d0e62458fedb180e2bc0905d5dfdc1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                    time.sleep(3)"},{"line_number":62,"context_line":"                    return"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"            time.sleep(client.build_interval)"},{"line_number":65,"context_line":"            resp, body \u003d client.get_server(server_id)"},{"line_number":66,"context_line":"            server_status \u003d body[\u0027status\u0027]"},{"line_number":67,"context_line":"            task_state \u003d _get_task_state(body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FpIU%3D","line":64,"updated":"2013-07-15 13:56:37.000000000","message":"I\u0027d move lines from 64 to 67 right after the while statement, line 45","commit_id":"406a812ec6979209d0b17b6c5f856db84b12efa2"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"cb87da35e9d0e62458fedb180e2bc0905d5dfdc1","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            if server_status \u003d\u003d \u0027ERROR\u0027:"},{"line_number":70,"context_line":"                raise exceptions.BuildErrorException(server_id\u003dserver_id)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            timed_out \u003d int(time.time()) - start \u003e\u003d client.build_timeout"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            if server_status !\u003d status and timed_out:"},{"line_number":75,"context_line":"                message \u003d (\u0027Server %s failed to reach %s status within the \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FpJs%3D","line":72,"updated":"2013-07-15 13:56:37.000000000","message":"wouldn\u0027t this be more readable by moving line 72 in the while condition and move the if at line 74 out of the while scope?","commit_id":"406a812ec6979209d0b17b6c5f856db84b12efa2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a94cffed93fc6335c5ebd52e35a9a6679d8c0ef6","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ServersCommon(object):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # NOTE(afazekas): This function needs to know a token and a subject."},{"line_number":29,"context_line":"    def wait_for_server_status(client, server_id, status, ready_wait\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2FPdw%3D","line":26,"updated":"2013-08-04 15:02:11.000000000","message":"Why is this in a ServersCommon object? Why not either put it in the base compute test class or just put it in utils as a function?","commit_id":"f9333b1ba297257656338445ad4f65cf18b8f4f0"}],"tempest/services/compute/json/servers_client.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"da721155247b9d6db66240373a777ad9245293c6","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    def wait_for_server_status(self, server_id, status):"},{"line_number":154,"context_line":"        \"\"\"Waits for a server to reach a given status.\"\"\""},{"line_number":155,"context_line":"        resp, body \u003d self.get_server(server_id)"},{"line_number":156,"context_line":"        server_status \u003d body[\u0027status\u0027]"},{"line_number":157,"context_line":"        start \u003d int(time.time())"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        while(server_status !\u003d status):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FlpY%3D","side":"PARENT","line":156,"updated":"2013-07-16 07:16:32.000000000","message":"Original wait is also using the more complex wait template.","commit_id":"9498c4e669911862323be64d91c2a02758be79c1"},{"author":{"_account_id":7629,"name":"Shawn Hartsock","email":"hartsock@acm.org","username":"hartsocks"},"change_message_id":"efc877ca1ca5fd2c4aa8eca2024efd13533f3ec9","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        while(server_status !\u003d status):"},{"line_number":160,"context_line":"            time.sleep(self.build_interval)"},{"line_number":161,"context_line":"            resp, body \u003d self.get_server(server_id)"},{"line_number":162,"context_line":"            server_status \u003d body[\u0027status\u0027]"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"            if server_status \u003d\u003d \u0027ERROR\u0027:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FLck%3D","side":"PARENT","line":161,"updated":"2013-09-10 15:02:21.000000000","message":"this loop has a call that updates the server_status, so it is waiting on a change. This makes sense to me.","commit_id":"5f4fa8b5bc48d3c625e37a9b1779ca23ae0efa45"}],"tempest/services/compute/xml/servers_client.py":[{"author":{"_account_id":7629,"name":"Shawn Hartsock","email":"hartsock@acm.org","username":"hartsocks"},"change_message_id":"efc877ca1ca5fd2c4aa8eca2024efd13533f3ec9","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        while(server_status !\u003d status):"},{"line_number":315,"context_line":"            time.sleep(self.build_interval)"},{"line_number":316,"context_line":"            resp, body \u003d self.get_server(server_id)"},{"line_number":317,"context_line":"            server_status \u003d body[\u0027status\u0027]"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"            if server_status \u003d\u003d \u0027ERROR\u0027:"},{"line_number":320,"context_line":"                raise exceptions.BuildErrorException(server_id\u003dserver_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FLcU%3D","side":"PARENT","line":317,"updated":"2013-09-10 15:02:21.000000000","message":"the above two lines ensure server_status changes over time. That means the loop could eventually exit without a timeout.","commit_id":"5f4fa8b5bc48d3c625e37a9b1779ca23ae0efa45"}]}
