)]}'
{"mistral/db/v2/sqlalchemy/api.py":[{"author":{"_account_id":9029,"name":"Moshe Elisha","email":"moshe.elisha@nokia.com","username":"MosheElisha"},"change_message_id":"bf80329965bae68006828251628f030dba08ef42","unresolved":false,"context_lines":[{"line_number":865,"context_line":"            values\u003d{\u0027state\u0027: state}"},{"line_number":866,"context_line":"        )"},{"line_number":867,"context_line":"    except oslo_sqlalchemy.update_match.NoRowsMatched:"},{"line_number":868,"context_line":"        LOG.warning("},{"line_number":869,"context_line":"            \"Can\u0027t change workflow execution state from %s to %s, \""},{"line_number":870,"context_line":"            \"because it has already been changed. [execution_id\u003d%s]\","},{"line_number":871,"context_line":"            cur_state, state, id"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_be03960d","line":868,"updated":"2017-11-10 11:32:59.000000000","message":"Soft: Maybe this should be INFO as there are valid use cases which this can heppen","commit_id":"eab826f7e17711fc5d805dfcea3e8394b7e5791b"}],"mistral/engine/workflows.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"ba3e39c4f5ff58fdbaf0ac807c08e3f99cccf6fb","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        cur_state \u003d self.wf_ex.state"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        if states.is_valid_transition(cur_state, state):"},{"line_number":301,"context_line":"            # Have to add WHERE clause to exclude possible conflicts if"},{"line_number":302,"context_line":"            # the state has already been changed."},{"line_number":303,"context_line":"            try:"},{"line_number":304,"context_line":"                specimen \u003d db_models.WorkflowExecution("},{"line_number":305,"context_line":"                    id\u003dself.wf_ex.id,"},{"line_number":306,"context_line":"                    state\u003dself.wf_ex.state"},{"line_number":307,"context_line":"                )"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"                self.wf_ex \u003d b.model_query("},{"line_number":310,"context_line":"                    db_models.WorkflowExecution).update_on_match("},{"line_number":311,"context_line":"                    specimen\u003dspecimen,"},{"line_number":312,"context_line":"                    surrogate_key\u003d\u0027id\u0027,"},{"line_number":313,"context_line":"                    values\u003d{\u0027state\u0027: state}"},{"line_number":314,"context_line":"                )"},{"line_number":315,"context_line":"            except oslo_sqlalchemy.update_match.NoRowsMatched:"},{"line_number":316,"context_line":"                LOG.warning("},{"line_number":317,"context_line":"                    \"Can\u0027t change workflow execution state from %s to %s, \""},{"line_number":318,"context_line":"                    \"because it has already been changed. Skipping this step. \""},{"line_number":319,"context_line":"                    \"[workflow\u003d%s, execution_id\u003d%s]\","},{"line_number":320,"context_line":"                    cur_state, state, self.wf_ex.name, self.wf_ex.id"},{"line_number":321,"context_line":"                )"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"                return"},{"line_number":324,"context_line":"            else:"},{"line_number":325,"context_line":"                self.wf_ex.state_info \u003d state_info"},{"line_number":326,"context_line":"                wf_trace.info("}],"source_content_type":"text/x-python","patch_set":2,"id":"1f485f77_4aa981dd","line":323,"range":{"start_line":301,"start_character":12,"end_line":323,"end_character":22},"updated":"2017-11-10 10:27:06.000000000","message":"Mike, the logic is correct but let\u0027s not expose low level DB details here in the engine layer. Please create a method in DB API similar to update_delayed_call(). We can just create the method \"update_workflow_execution_state(expected_state, state)\" that return boolean to show if update was actually made. But please make sure that it bubbles up all operational errors, it must not handle them.","commit_id":"7bd5ef0597f366b598335421c9c1be70fc9887af"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"1120735383d68278803b80bf92c3adee371d98c0","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        cur_state \u003d self.wf_ex.state"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        if states.is_valid_transition(cur_state, state):"},{"line_number":301,"context_line":"            # Have to add WHERE clause to exclude possible conflicts if"},{"line_number":302,"context_line":"            # the state has already been changed."},{"line_number":303,"context_line":"            try:"},{"line_number":304,"context_line":"                specimen \u003d db_models.WorkflowExecution("},{"line_number":305,"context_line":"                    id\u003dself.wf_ex.id,"},{"line_number":306,"context_line":"                    state\u003dself.wf_ex.state"},{"line_number":307,"context_line":"                )"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"                self.wf_ex \u003d b.model_query("},{"line_number":310,"context_line":"                    db_models.WorkflowExecution).update_on_match("},{"line_number":311,"context_line":"                    specimen\u003dspecimen,"},{"line_number":312,"context_line":"                    surrogate_key\u003d\u0027id\u0027,"},{"line_number":313,"context_line":"                    values\u003d{\u0027state\u0027: state}"},{"line_number":314,"context_line":"                )"},{"line_number":315,"context_line":"            except oslo_sqlalchemy.update_match.NoRowsMatched:"},{"line_number":316,"context_line":"                LOG.warning("},{"line_number":317,"context_line":"                    \"Can\u0027t change workflow execution state from %s to %s, \""},{"line_number":318,"context_line":"                    \"because it has already been changed. Skipping this step. \""},{"line_number":319,"context_line":"                    \"[workflow\u003d%s, execution_id\u003d%s]\","},{"line_number":320,"context_line":"                    cur_state, state, self.wf_ex.name, self.wf_ex.id"},{"line_number":321,"context_line":"                )"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"                return"},{"line_number":324,"context_line":"            else:"},{"line_number":325,"context_line":"                self.wf_ex.state_info \u003d state_info"},{"line_number":326,"context_line":"                wf_trace.info("}],"source_content_type":"text/x-python","patch_set":2,"id":"1f485f77_ca4451ba","line":323,"range":{"start_line":301,"start_character":12,"end_line":323,"end_character":22},"in_reply_to":"1f485f77_4aa981dd","updated":"2017-11-10 11:10:14.000000000","message":"Done","commit_id":"7bd5ef0597f366b598335421c9c1be70fc9887af"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"c5410b41fbd7d477d511a38f5fa0e1e151ee0737","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        cur_state \u003d self.wf_ex.state"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        if states.is_valid_transition(cur_state, state):"},{"line_number":299,"context_line":"            self.wf_ex \u003d db_api.update_workflow_execution_state("},{"line_number":300,"context_line":"                id\u003dself.wf_ex.id,"},{"line_number":301,"context_line":"                cur_state\u003dcur_state,"},{"line_number":302,"context_line":"                state\u003dstate"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_defe5204","line":299,"updated":"2017-11-10 11:33:08.000000000","message":"I\u0027d suggest we don\u0027t immediately assign it to self.wf_ex because if the update is not successful then we\u0027ll get None for this field and the entire Workflow object becomes unusable. But it may be still needed to perform some operations not related to its state (say requiring only ID or some other info).","commit_id":"eab826f7e17711fc5d805dfcea3e8394b7e5791b"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"51ba3cf02088b148f664e52ccadebf061ee7cd3f","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        cur_state \u003d self.wf_ex.state"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        if states.is_valid_transition(cur_state, state):"},{"line_number":299,"context_line":"            self.wf_ex \u003d db_api.update_workflow_execution_state("},{"line_number":300,"context_line":"                id\u003dself.wf_ex.id,"},{"line_number":301,"context_line":"                cur_state\u003dcur_state,"},{"line_number":302,"context_line":"                state\u003dstate"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_17accd8a","line":299,"in_reply_to":"1f485f77_defe5204","updated":"2017-11-10 15:00:23.000000000","message":"Done","commit_id":"eab826f7e17711fc5d805dfcea3e8394b7e5791b"}],"mistral/tests/unit/engine/test_set_state.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"ba3e39c4f5ff58fdbaf0ac807c08e3f99cccf6fb","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        with db_api.transaction():"},{"line_number":60,"context_line":"            wf_ex \u003d db_api.get_workflow_execution(wf_ex.id)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.assertEqual(\"SUCCESS\", wf_ex.state)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f485f77_2a976593","line":62,"range":{"start_line":62,"start_character":13,"end_line":62,"end_character":24},"updated":"2017-11-10 10:27:06.000000000","message":"Please write one more test that changes the state successfully.","commit_id":"7bd5ef0597f366b598335421c9c1be70fc9887af"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"1120735383d68278803b80bf92c3adee371d98c0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        with db_api.transaction():"},{"line_number":60,"context_line":"            wf_ex \u003d db_api.get_workflow_execution(wf_ex.id)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.assertEqual(\"SUCCESS\", wf_ex.state)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f485f77_4a12a1b3","line":62,"range":{"start_line":62,"start_character":13,"end_line":62,"end_character":24},"in_reply_to":"1f485f77_2a976593","updated":"2017-11-10 11:10:14.000000000","message":"I don\u0027t think this test is required because there are a lot of places that check it indirectly.","commit_id":"7bd5ef0597f366b598335421c9c1be70fc9887af"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"c5410b41fbd7d477d511a38f5fa0e1e151ee0737","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        with db_api.transaction():"},{"line_number":60,"context_line":"            wf_ex \u003d db_api.get_workflow_execution(wf_ex.id)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.assertEqual(\"SUCCESS\", wf_ex.state)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f485f77_7e0d1e36","line":62,"range":{"start_line":62,"start_character":13,"end_line":62,"end_character":24},"in_reply_to":"1f485f77_4a12a1b3","updated":"2017-11-10 11:33:08.000000000","message":"Ok, agree.","commit_id":"7bd5ef0597f366b598335421c9c1be70fc9887af"}]}
