DLR-RM / RAFCON

RAFCON (RMC advanced flow control) uses hierarchical state machines, featuring concurrent state execution, to represent robot programs. It ships with a graphical user interface supporting the creation of state machines and contains IDE like debugging mechanisms. Alternatively, state machines can programmatically be generated using RAFCON's API.
https://dlr-rm.github.io/RAFCON/
Eclipse Public License 1.0
180 stars 34 forks source link

test_dynamic_state_insertion unstable #779

Open franzlst opened 4 years ago

franzlst commented 4 years ago

The test_dynamic_state_insertion is unstable. The dynamic_library_insertion parameterization is stable, the other two are not.

Till the test is fixed, it is marked as unstable.

The following stacktrace occurs often:

... 
2019-08-06 10:52:58:    DEBUG - rafcon.core.execution.execution_engine:  Start execution engine ...
Both threads are former gui threads! Current thread <Thread(Thread-626, started 140231936726784)>, Observer thread <Thread(Thread-302, stopped 140233028462336)>
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.hierarchy_state:  Starting execution of HierarchyState with name 'dynamic state deletion inside library' and id 'PMEJDO' [1 child states]
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.library_state:  Entering library state 'dynamic_library_insertion_and_deletion' with name 'dynamic_library_insertion_and_deletion'
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.hierarchy_state:  Starting execution of HierarchyState with name 'dynamic library insertion and deletion' and id 'QUSEKE' [4 child states]
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.library_state:  Entering library state 'disable_history' with name 'disable history'
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.execution_state:  Running ExecutionState with name 'disable history' and id 'JFDYXU'
2019-08-06 10:52:58:    DEBUG - rafcon.disable history:  Disable history
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.state:  Finished execution of ExecutionState with name 'disable history' and id 'JFDYXU': Outcome 'success' [0]
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.library_state:  Exiting library state 'disable_history' with name 'disable history'
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.state:  Finished execution of LibraryState with name 'disable history' and id 'PHTTXK': Outcome 'success' [0]
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.execution_state:  Running ExecutionState with name 'generate state' and id 'QRRWWV'
2019-08-06 10:52:58:    DEBUG - rafcon.generate state:  Insert state
2019-08-06 10:52:58:    DEBUG - rafcon.core.storage.storage:  Loading state machine from path /var/lib/jenkins/workspace/rafcon_github_all_branches/tests/assets/unit_test_state_machines/increase_gvm_counter...
2019-08-06 10:52:58:    DEBUG - rafcon.core.storage.storage:  Load state recursively: /var/lib/jenkins/workspace/rafcon_github_all_branches/tests/assets/unit_test_state_machines/increase_gvm_counter/increase gvm counter$QICPUE
2019-08-06 10:52:58:    DEBUG - rafcon.core.storage.storage:  Loaded state machine (/var/lib/jenkins/workspace/rafcon_github_all_branches/tests/assets/unit_test_state_machines/increase_gvm_counter) has 1 states. (Max hierarchy level 1)
2019-08-06 10:52:58:    DEBUG - rafcon.core.storage.storage:  Loaded state machine (/var/lib/jenkins/workspace/rafcon_github_all_branches/tests/assets/unit_test_state_machines/increase_gvm_counter) has 0 transitions.
2019-08-06 10:52:58:  VERBOSE - rafcon.utils.timer:  Profiler: load_state_machine_from_path (args: ('/var/lib/jenkins/workspace/rafcon_github_all_branches/tests/assets/unit_test_state_machines/increase_gvm_counter',); kwargs: {}); duration: 0.0052s
2019-08-06 10:52:58:  WARNING - rafcon.gui.models.abstract_state:  You have modified core property of an inner state of a library state.
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.state:  Finished execution of ExecutionState with name 'generate state' and id 'QRRWWV': Outcome 'aborted' [-1]
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.container_state:  Outcome 'aborted' [-1] of ExecutionState with name 'generate state' and id 'QRRWWV' not connected, using default transition to parental Outcome 'aborted' [-1]
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.state:  Finished execution of HierarchyState with name 'dynamic library insertion and deletion' and id 'QUSEKE' [4 child states]: Outcome 'aborted' [-1]
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.library_state:  Exiting library state 'dynamic_library_insertion_and_deletion' with name 'dynamic_library_insertion_and_deletion'
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.state:  Finished execution of LibraryState with name 'dynamic_library_insertion_and_deletion' and id 'SUGIGX': Outcome 'aborted' [-1]
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.container_state:  Outcome 'aborted' [-1] of LibraryState with name 'dynamic_library_insertion_and_deletion' and id 'SUGIGX' not connected, using default transition to parental Outcome 'aborted' [-1]
2019-08-06 10:52:58:    DEBUG - rafcon.core.states.state:  Finished execution of HierarchyState with name 'dynamic state deletion inside library' and id 'PMEJDO' [1 child states]: Outcome 'aborted' [-1]
----------------------------- Captured stderr call -----------------------------
2019-08-06 10:52:58:    ERROR - rafcon.core.states.execution_state:  ExecutionState with name 'generate state' and id 'QRRWWV' had an internal error: AssertionError: 
Traceback (most recent call last):
  File "script.py (940)", line 15, in execute
  File "/var/lib/jenkins/workspace/rafcon_github_all_branches/source/rafcon/utils/gui_functions.py", line 71, in call_gui_callback
    raise_(e_instance, None, e_traceback)
  File "/var/lib/jenkins/workspace/rafcon_github_all_branches/.tox/py35/lib/python3.5/site-packages/future/utils/__init__.py", line 416, in raise_
    raise exc
  File "/var/lib/jenkins/workspace/rafcon_github_all_branches/source/rafcon/utils/gui_functions.py", line 49, in fun
    result = callback(*args)
  File "/var/lib/jenkins/workspace/rafcon_github_all_branches/.tox/py35/lib/python3.5/site-packages/gtkmvc3/observable.py", line 47, in wrapper
    res = _func(*args, **kwargs)
AssertionError

Originally created by @sebastian-brunner (Sebastian.Brunner@dlr.de) at 2019-08-06 11:50:51+00:00 (moved from RMC internal repository)

franzlst commented 4 years ago

Also the first parametrization (dynamic_library_insertion) is unstable.

This is the underlying error, causing the AssertionError:

00:03:47.550 =================================== FAILURES ===================================
00:03:47.550 __________ test_dynamic_state_insertion[dynamic_library_insertion-0] ___________
00:03:47.550 Traceback (most recent call last):
00:03:47.550   File "/home_local/jenkins/common_rafcon_develop/tests/gui/execution/test_dynamic_state_operations.py", line 30, in test_dynamic_state_insertion
00:03:47.550     gui(menubar_ctrl.on_start_activate, None, None)
00:03:47.550   File "/home_local/jenkins/common_rafcon_develop/tests/gui/conftest.py", line 34, in __call__
00:03:47.550     call_gui_callback(wait_for_gui)
00:03:47.550   File "/home_local/jenkins/common_rafcon_develop/.tox/py27/lib/python2.7/site-packages/rafcon/utils/gui_functions.py", line 71, in call_gui_callback
00:03:47.550     raise_(e_instance, None, e_traceback)
00:03:47.550   File "/home_local/jenkins/common_rafcon_develop/.tox/py27/lib/python2.7/site-packages/rafcon/utils/gui_functions.py", line 49, in fun
00:03:47.550     result = callback(*args, **kwargs)
00:03:47.550   File "/home_local/jenkins/common_rafcon_develop/.tox/py27/lib/python2.7/site-packages/rafcon/core/decorators.py", line 53, in func_wrapper
00:03:47.550     return_value = func(*args, **kwargs)
00:03:47.550   File "/home_local/jenkins/common_rafcon_develop/.tox/py27/lib/python2.7/site-packages/gtkmvc3/observable.py", line 47, in wrapper
00:03:47.550     res = _func(*args, **kwargs)
00:03:47.550   File "/home_local/jenkins/common_rafcon_develop/.tox/py27/lib/python2.7/site-packages/rafcon/core/states/container_state.py", line 768, in add_state
00:03:47.550     assert isinstance(state, State)
00:03:47.550 AssertionError

So a LibraryState is created (dynamically in the execute function of an ExecutionState) and passed as state to ContainerState.add_state. However, at that point assert isinstance(state, State) is not fulfilled.

I tried hard, to find out why this is, but did not succeed. One problem is that I cannot reproduce this locally on my machine.

Originally created by @franzlst (Franz.Steinmetz@dlr.de) at 2019-08-06 12:08:03+00:00 (moved from RMC internal repository)