)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d6a0844f5da9d27ce4245344c5024c014d003217","unresolved":false,"context_lines":[{"line_number":17,"context_line":"second. Consequently the second invocation will fail to perform the"},{"line_number":18,"context_line":"task_state check and therefore succeed, resulting in a race."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"We rewrite the old race unit test which wasn\u0027t testing the correct"},{"line_number":21,"context_line":"thing for 2 reasons:"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"1. Due to the bug fixed in this patch, although we were calling"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"dfbec78f_b77786a0","line":20,"range":{"start_line":20,"start_character":19,"end_line":20,"end_character":23},"updated":"2019-05-14 14:01:56.000000000","message":"racy","commit_id":"b0d4c1f42d3ec2a9186aca0f3daefbf97ff3dcca"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e2adfd5b8b60ec3f8683207b931ecabf28406c10","unresolved":false,"context_lines":[{"line_number":2776,"context_line":"    for field in (\u0027task_state\u0027, \u0027vm_state\u0027):"},{"line_number":2777,"context_line":"        expected_field \u003d \u0027expected_%s\u0027 % field"},{"line_number":2778,"context_line":"        if expected_field in updates:"},{"line_number":2779,"context_line":"            value \u003d updates.pop(expected_field, None)"},{"line_number":2780,"context_line":"            # Coerce all single values to singleton lists"},{"line_number":2781,"context_line":"            if value is None:"},{"line_number":2782,"context_line":"                expected[field] \u003d [None]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_6cdb817b","line":2779,"updated":"2019-05-14 13:03:15.000000000","message":"/me nods.","commit_id":"b0d4c1f42d3ec2a9186aca0f3daefbf97ff3dcca"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d07adfb9fbc078a0ae8e834d8e5454bad8b10349","unresolved":false,"context_lines":[{"line_number":2762,"context_line":"    if not uuidutils.is_uuid_like(instance_uuid):"},{"line_number":2763,"context_line":"        raise exception.InvalidUUID(uuid\u003dinstance_uuid)"},{"line_number":2764,"context_line":""},{"line_number":2765,"context_line":"    updates \u003d copy.copy(values)"},{"line_number":2766,"context_line":""},{"line_number":2767,"context_line":"    if expected is None:"},{"line_number":2768,"context_line":"        expected \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_12b3004f","line":2765,"updated":"2019-05-14 14:48:16.000000000","message":"Would be good to leave a comment here about why we need the copy (because values is modified by reference to pop expected_task_state and expected_vm_state which defeats retries when this fails due to concurrent updates).","commit_id":"637dd45684135e582e5ced6a3d87d9480d0e881e"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"89e74977883cb22a6fe2a402080a5544681de348","unresolved":false,"context_lines":[{"line_number":2762,"context_line":"    if not uuidutils.is_uuid_like(instance_uuid):"},{"line_number":2763,"context_line":"        raise exception.InvalidUUID(uuid\u003dinstance_uuid)"},{"line_number":2764,"context_line":""},{"line_number":2765,"context_line":"    updates \u003d copy.copy(values)"},{"line_number":2766,"context_line":""},{"line_number":2767,"context_line":"    if expected is None:"},{"line_number":2768,"context_line":"        expected \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_3875c364","line":2765,"in_reply_to":"dfbec78f_12b3004f","updated":"2019-05-14 16:03:37.000000000","message":"Can do. Would that be ok in a follow-up?","commit_id":"637dd45684135e582e5ced6a3d87d9480d0e881e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"624dab237f3bd4c6c2ca707cb520898931ef952c","unresolved":false,"context_lines":[{"line_number":2774,"context_line":"        expected \u003d {k: [None] if v is None else sqlalchemyutils.to_list(v)"},{"line_number":2775,"context_line":"                       for (k, v) in expected.items()}"},{"line_number":2776,"context_line":""},{"line_number":2777,"context_line":"    # Extract \u0027expected_\u0027 values from values dict, as these aren\u0027t actually"},{"line_number":2778,"context_line":"    # updates"},{"line_number":2779,"context_line":"    for field in (\u0027task_state\u0027, \u0027vm_state\u0027):"},{"line_number":2780,"context_line":"        expected_field \u003d \u0027expected_%s\u0027 % field"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_db86d3b9","line":2777,"range":{"start_line":2777,"start_character":38,"end_line":2777,"end_character":44},"updated":"2019-05-15 12:38:39.000000000","message":"nit: this could be changed to \"updates dict\" but I think it makes sense either way, at least for now - in 2 years time I might wonder what this is talking about.","commit_id":"aae5c7aa3819ad9161fd2effed3872d540099230"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d6a0844f5da9d27ce4245344c5024c014d003217","unresolved":false,"context_lines":[{"line_number":2691,"context_line":"        # transaction we will read the correct data."},{"line_number":2692,"context_line":""},{"line_number":2693,"context_line":"        instance \u003d self.create_instance_with_args("},{"line_number":2694,"context_line":"                task_state \u003d task_states.SHELVING)"},{"line_number":2695,"context_line":""},{"line_number":2696,"context_line":"        instance_out_of_date \u003d copy.copy(instance)"},{"line_number":2697,"context_line":"        instance_out_of_date[\u0027task_state\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_37de366d","line":2694,"range":{"start_line":2694,"start_character":26,"end_line":2694,"end_character":29},"updated":"2019-05-14 14:01:56.000000000","message":"nit (weird flake8 didn\u0027t catch this, tbh)","commit_id":"b0d4c1f42d3ec2a9186aca0f3daefbf97ff3dcca"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"f65a5b73606671da0b6dd1ef5a13ee094fc45a9d","unresolved":false,"context_lines":[{"line_number":2691,"context_line":"        # transaction we will read the correct data."},{"line_number":2692,"context_line":""},{"line_number":2693,"context_line":"        instance \u003d self.create_instance_with_args("},{"line_number":2694,"context_line":"                task_state \u003d task_states.SHELVING)"},{"line_number":2695,"context_line":""},{"line_number":2696,"context_line":"        instance_out_of_date \u003d copy.copy(instance)"},{"line_number":2697,"context_line":"        instance_out_of_date[\u0027task_state\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_b7dea60e","line":2694,"range":{"start_line":2694,"start_character":26,"end_line":2694,"end_character":29},"in_reply_to":"dfbec78f_37de366d","updated":"2019-05-14 14:20:32.000000000","message":"Eww, yeah. Given that this is probably a flake8 bug I\u0027m going to respin anyway.","commit_id":"b0d4c1f42d3ec2a9186aca0f3daefbf97ff3dcca"}]}
