)]}'
{"cinder/test.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"19c2d20350d75627945fc7ee608d8a5ae937da15","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                if not any(m for m in mock_notify.call_args_list"},{"line_number":416,"context_line":"                           if (m[0][0] \u003d\u003d c[0]     # \u0027INFO\u0027"},{"line_number":417,"context_line":"                               and"},{"line_number":418,"context_line":"                               m[0][2] \u003d\u003d c[1])):  # \u0027volume.retype\u0027"},{"line_number":419,"context_line":"                    raise AssertionError(\"notify call not found: %s\" % c)"},{"line_number":420,"context_line":"            return"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_160ca337","line":418,"range":{"start_line":418,"start_character":54,"end_line":418,"end_character":67},"updated":"2019-02-22 05:51:53.000000000","message":"This is the most occurring case in our gate however this isn\u0027t the only case. i\u0027ve seen failures like \nvolume.create.start !\u003d backup.createprogress\n\nThe root cause is the backup notifications leaking.\nOne solution is we can generalize this approach for all notifications but i\u0027m not exactly sure about the side effects that it will cause.","commit_id":"6f9135b6a48d7e900e8b33adf1e69c2463eac852"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"39326be3bd543e829d2bf5a1b16e798b3df4ce70","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                if not any(m for m in mock_notify.call_args_list"},{"line_number":416,"context_line":"                           if (m[0][0] \u003d\u003d c[0]     # \u0027INFO\u0027"},{"line_number":417,"context_line":"                               and"},{"line_number":418,"context_line":"                               m[0][2] \u003d\u003d c[1])):  # \u0027volume.retype\u0027"},{"line_number":419,"context_line":"                    raise AssertionError(\"notify call not found: %s\" % c)"},{"line_number":420,"context_line":"            return"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_328e8a27","line":418,"range":{"start_line":418,"start_character":54,"end_line":418,"end_character":67},"in_reply_to":"9fdfeff1_12110605","updated":"2019-02-22 15:50:52.000000000","message":"Yes, i understand the approach, since you only modified the retype tests (with the new param \u0027any_order\u003dTrue\u0027), i was referring to using this code for all other notification mocking tests (that use assert_notify_called) as they might fail for the same reason as the retype test.\nBut i\u0027m not certain if it will cause any side effects.","commit_id":"6f9135b6a48d7e900e8b33adf1e69c2463eac852"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d609c80f3127f08143066b972aa4b370472226b8","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                if not any(m for m in mock_notify.call_args_list"},{"line_number":416,"context_line":"                           if (m[0][0] \u003d\u003d c[0]     # \u0027INFO\u0027"},{"line_number":417,"context_line":"                               and"},{"line_number":418,"context_line":"                               m[0][2] \u003d\u003d c[1])):  # \u0027volume.retype\u0027"},{"line_number":419,"context_line":"                    raise AssertionError(\"notify call not found: %s\" % c)"},{"line_number":420,"context_line":"            return"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_12110605","line":418,"range":{"start_line":418,"start_character":54,"end_line":418,"end_character":67},"in_reply_to":"9fdfeff1_160ca337","updated":"2019-02-22 15:30:56.000000000","message":"volume.retype is just specified as an example here.\n\nYes, the root cause is notifications leaking, but we can definitely not have unit tests fail when they leak if we assert on them in this way instead of asserting on the contents of the whole notifications list.  Because here, the notifications that shouldn\u0027t be there are ignored.\n\nIt doesn\u0027t fix the root cause, but I\u0027d like to at least have our gates more reliably passing for now.","commit_id":"6f9135b6a48d7e900e8b33adf1e69c2463eac852"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ccee347ceb011f41f7e4856d72f4a7d9b530816e","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                if not any(m for m in mock_notify.call_args_list"},{"line_number":416,"context_line":"                           if (m[0][0] \u003d\u003d c[0]     # \u0027INFO\u0027"},{"line_number":417,"context_line":"                               and"},{"line_number":418,"context_line":"                               m[0][2] \u003d\u003d c[1])):  # \u0027volume.retype\u0027"},{"line_number":419,"context_line":"                    raise AssertionError(\"notify call not found: %s\" % c)"},{"line_number":420,"context_line":"            return"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_18592534","line":418,"range":{"start_line":418,"start_character":54,"end_line":418,"end_character":67},"in_reply_to":"9fdfeff1_328e8a27","updated":"2019-02-22 16:50:04.000000000","message":"If it fails anywhere else, you can just add any_order\u003dTrue for that instance.  (Until we fix the root problem.)","commit_id":"6f9135b6a48d7e900e8b33adf1e69c2463eac852"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"39326be3bd543e829d2bf5a1b16e798b3df4ce70","unresolved":false,"context_lines":[{"line_number":419,"context_line":"                    raise AssertionError(\"notify call not found: %s\" % c)"},{"line_number":420,"context_line":"            return"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"        for i in range(0, len(calls)):"},{"line_number":423,"context_line":"            mock_call \u003d mock_notify.call_args_list[i]"},{"line_number":424,"context_line":"            call \u003d calls[i]"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"            posargs \u003d mock_call[0]"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"            self.assertEqual(call[0], posargs[0])"},{"line_number":429,"context_line":"            self.assertEqual(call[1], posargs[2])"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    def assertTrue(self, x, *args, **kwargs):"},{"line_number":432,"context_line":"        \"\"\"Assert that value is True."}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_52df8e0b","line":429,"range":{"start_line":422,"start_character":8,"end_line":429,"end_character":49},"updated":"2019-02-22 15:50:52.000000000","message":"If we will be mocking all the notifications with the new \u0027IGNORE NOTIFICATION\u0027 code above then this wouldn\u0027t be necessary (if it serves any other purpose otherwise)","commit_id":"6f9135b6a48d7e900e8b33adf1e69c2463eac852"}]}
