Skip to content

Commit abdf613

Browse files
authored
Merge branch 'master' into issue/disallowDecryptKVForValuesMarkedSecret
2 parents 35c07a5 + b785e35 commit abdf613

File tree

36 files changed

+1502
-234
lines changed

36 files changed

+1502
-234
lines changed

.travis.yml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,8 @@ cache:
9494
#- .tox/
9595

9696
before_install:
97-
# Work around for apt Travis timeout issues, see https://github.com/travis-ci/travis-ci/issues/9112
98-
#- sudo apt-get update --option Acquire::Retries=100 --option Acquire::http::Timeout="60"
99-
- pip install --upgrade "pip>=9.0,<9.1"
100-
- sudo pip install --upgrade "virtualenv==15.1.0"
97+
- pip install --upgrade "pip>=19.0,<20.0"
98+
- sudo pip install --upgrade "virtualenv==16.6.0"
10199

102100
install:
103101
- ./scripts/travis/install-requirements.sh

CHANGELOG.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ Fixed
1717

1818
* Fix orquesta st2kv to return empty string and null values. (bug fix) #4678
1919
* Allow tasks defined in the same task transition with ``fail`` to run for orquesta. (bug fix)
20+
* Fix workflow service to handle unexpected coordinator and database errors. (bug fix) #4704 #4705
21+
* Fix filter ``to_yaml_string`` to handle mongoengine base types for dict and list. (bug fix) #4700
2022

2123
3.0.1 - May 24, 2019
2224
--------------------

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,10 +389,10 @@ requirements: virtualenv .sdist-requirements install-runners
389389
@echo
390390
@echo "==================== requirements ===================="
391391
@echo
392-
# Make sure we use latest version of pip which is < 10.0.0
392+
# Make sure we use latest version of pip which is 19
393393
$(VIRTUALENV_DIR)/bin/pip --version
394-
$(VIRTUALENV_DIR)/bin/pip install --upgrade "pip>=9.0,<9.1"
395-
$(VIRTUALENV_DIR)/bin/pip install --upgrade "virtualenv==15.1.0" # Required for packs.install in dev envs.
394+
$(VIRTUALENV_DIR)/bin/pip install --upgrade "pip>=19.0,<20.0"
395+
$(VIRTUALENV_DIR)/bin/pip install --upgrade "virtualenv==16.6.0" # Required for packs.install in dev envs
396396

397397
# Generate all requirements to support current CI pipeline.
398398
$(VIRTUALENV_DIR)/bin/python scripts/fixate-requirements.py --skip=virtualenv,virtualenv-osx -s st2*/in-requirements.txt contrib/runners/*/in-requirements.txt -f fixed-requirements.txt -o requirements.txt

conf/st2.conf.sample

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,4 +365,12 @@ webui_base_url = https://localhost
365365
[workflow_engine]
366366
# Location of the logging configuration file.
367367
logging = /etc/st2/logging.workflowengine.conf
368+
# Max time to stop retrying.
369+
retry_stop_max_msec = 60000
370+
# Max jitter interval to smooth out retries.
371+
retry_max_jitter_msec = 1000
372+
# Interval inbetween retries.
373+
retry_wait_fixed_msec = 1000
374+
# Max seconds to allow workflow execution be idled before it is identified as orphaned and cancelled by the garbage collector.
375+
gc_max_idle_sec = 900
368376

contrib/examples/actions/workflows/tests/orquesta-test-jinja-data-functions.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ description: A basic workflow testing data related functions.
55
vars:
66
- data_json_str_1: '{"foo": {"bar": "foobar"}}'
77
- none: null
8+
- data_list:
9+
- a: 1
10+
b: 2
11+
- x: 3
12+
y: 4
813

914
tasks:
1015
task1:
@@ -30,3 +35,4 @@ output:
3035
- data_json_str_3: '{{ json_dump(ctx("data_json_obj_4")) }}'
3136
- data_none_str: '{{ use_none(ctx("none")) }}'
3237
- data_str: '{{ use_none("foobar") }}'
38+
- data_list_str: '{{ to_yaml_string(ctx("data_list")) }}'
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
git+https://github.com/StackStorm/orquesta.git@67fb92fb652073b37fe9678f9a9b9934ba8ac739#egg=orquesta
1+
git+https://github.com/StackStorm/orquesta.git@v1.0.0#egg=orquesta
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# Don't edit this file. It's generated automatically!
2-
git+https://github.com/StackStorm/orquesta.git@67fb92fb652073b37fe9678f9a9b9934ba8ac739#egg=orquesta
2+
git+https://github.com/StackStorm/orquesta.git@v1.0.0#egg=orquesta

contrib/runners/orquesta_runner/tests/unit/test_error_handling.py

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
from st2common.persistence import execution as ex_db_access
3535
from st2common.persistence import liveaction as lv_db_access
3636
from st2common.persistence import workflow as wf_db_access
37-
from st2common.runners import base as runners
3837
from st2common.services import action as ac_svc
3938
from st2common.services import workflows as wf_svc
4039
from st2common.transport import liveaction as lv_ac_xport
@@ -76,7 +75,7 @@
7675
wf_ex_xport.WorkflowExecutionPublisher,
7776
'publish_state',
7877
mock.MagicMock(side_effect=mock_wf_ex_xport.MockWorkflowExecutionPublisher.publish_state))
79-
class OrquestaErrorHandlingTest(st2tests.ExecutionDbTestCase):
78+
class OrquestaErrorHandlingTest(st2tests.WorkflowTestCase):
8079
ensure_indexes = True
8180
ensure_indexes_models = [
8281
WorkflowExecutionDB,
@@ -100,13 +99,6 @@ def setUpClass(cls):
10099
for pack in PACKS:
101100
actions_registrar.register_from_pack(pack)
102101

103-
@classmethod
104-
def get_runner_class(cls, runner_name):
105-
return runners.get_runner(runner_name, runner_name).__class__
106-
107-
def sort_wf_runtime_errors(self, errors):
108-
return sorted(errors, key=lambda x: x.get('task_id', None))
109-
110102
def test_fail_inspection(self):
111103
expected_errors = [
112104
{
@@ -181,7 +173,7 @@ def test_fail_input_rendering(self):
181173
tk_ex_dbs = wf_db_access.TaskExecution.query(workflow_execution=str(wf_ex_db.id))
182174
self.assertEqual(len(tk_ex_dbs), 0)
183175
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
184-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
176+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
185177

186178
lv_ac_db = lv_db_access.LiveAction.get_by_id(str(lv_ac_db.id))
187179
self.assertEqual(lv_ac_db.status, ac_const.LIVEACTION_STATUS_FAILED)
@@ -215,7 +207,7 @@ def test_fail_vars_rendering(self):
215207
tk_ex_dbs = wf_db_access.TaskExecution.query(workflow_execution=str(wf_ex_db.id))
216208
self.assertEqual(len(tk_ex_dbs), 0)
217209
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
218-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
210+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
219211

220212
lv_ac_db = lv_db_access.LiveAction.get_by_id(str(lv_ac_db.id))
221213
self.assertEqual(lv_ac_db.status, ac_const.LIVEACTION_STATUS_FAILED)
@@ -251,7 +243,7 @@ def test_fail_start_task_action(self):
251243
tk_ex_dbs = wf_db_access.TaskExecution.query(workflow_execution=str(wf_ex_db.id))
252244
self.assertEqual(len(tk_ex_dbs), 0)
253245
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
254-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
246+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
255247

256248
lv_ac_db = lv_db_access.LiveAction.get_by_id(str(lv_ac_db.id))
257249
self.assertEqual(lv_ac_db.status, ac_const.LIVEACTION_STATUS_FAILED)
@@ -288,7 +280,7 @@ def test_fail_start_task_input_expr_eval(self):
288280
tk_ex_dbs = wf_db_access.TaskExecution.query(workflow_execution=str(wf_ex_db.id))
289281
self.assertEqual(len(tk_ex_dbs), 0)
290282
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
291-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
283+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
292284

293285
lv_ac_db = lv_db_access.LiveAction.get_by_id(str(lv_ac_db.id))
294286
self.assertEqual(lv_ac_db.status, ac_const.LIVEACTION_STATUS_FAILED)
@@ -326,7 +318,7 @@ def test_fail_start_task_input_value_type(self):
326318
# Assert workflow and task executions failed.
327319
wf_ex_db = wf_db_access.WorkflowExecution.query(action_execution=str(ac_ex_db.id))[0]
328320
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
329-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
321+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
330322

331323
tk_ex_db = wf_db_access.TaskExecution.query(workflow_execution=str(wf_ex_db.id))[0]
332324
self.assertEqual(tk_ex_db.status, wf_statuses.FAILED)
@@ -376,7 +368,7 @@ def test_fail_next_task_action(self):
376368
self.assertEqual(tk_ex_db.status, wf_statuses.SUCCEEDED)
377369
wf_ex_db = wf_db_access.WorkflowExecution.get_by_id(wf_ex_db.id)
378370
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
379-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
371+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
380372

381373
lv_ac_db = lv_db_access.LiveAction.get_by_id(str(lv_ac_db.id))
382374
self.assertEqual(lv_ac_db.status, ac_const.LIVEACTION_STATUS_FAILED)
@@ -422,7 +414,7 @@ def test_fail_next_task_input_expr_eval(self):
422414
self.assertEqual(tk_ex_db.status, wf_statuses.SUCCEEDED)
423415
wf_ex_db = wf_db_access.WorkflowExecution.get_by_id(wf_ex_db.id)
424416
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
425-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
417+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
426418

427419
lv_ac_db = lv_db_access.LiveAction.get_by_id(str(lv_ac_db.id))
428420
self.assertEqual(lv_ac_db.status, ac_const.LIVEACTION_STATUS_FAILED)
@@ -471,7 +463,7 @@ def test_fail_next_task_input_value_type(self):
471463
# Assert workflow execution and task2 execution failed.
472464
wf_ex_db = wf_db_access.WorkflowExecution.get_by_id(str(wf_ex_db.id))
473465
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
474-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
466+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
475467

476468
tk2_ex_db = wf_db_access.TaskExecution.query(task_id='task2')[0]
477469
self.assertEqual(tk2_ex_db.status, wf_statuses.FAILED)
@@ -518,7 +510,7 @@ def test_fail_task_execution(self):
518510
# Assert workflow state and result.
519511
wf_ex_db = wf_db_access.WorkflowExecution.get_by_id(str(wf_ex_db.id))
520512
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
521-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
513+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
522514

523515
lv_ac_db = lv_db_access.LiveAction.get_by_id(str(lv_ac_db.id))
524516
self.assertEqual(lv_ac_db.status, ac_const.LIVEACTION_STATUS_FAILED)
@@ -563,7 +555,7 @@ def test_fail_task_transition(self):
563555
self.assertEqual(tk_ex_db.status, wf_statuses.SUCCEEDED)
564556
wf_ex_db = wf_db_access.WorkflowExecution.get_by_id(wf_ex_db.id)
565557
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
566-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
558+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
567559

568560
lv_ac_db = lv_db_access.LiveAction.get_by_id(str(lv_ac_db.id))
569561
self.assertEqual(lv_ac_db.status, ac_const.LIVEACTION_STATUS_FAILED)
@@ -609,7 +601,7 @@ def test_fail_task_publish(self):
609601
self.assertEqual(tk_ex_db.status, wf_statuses.SUCCEEDED)
610602
wf_ex_db = wf_db_access.WorkflowExecution.get_by_id(wf_ex_db.id)
611603
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
612-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
604+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
613605

614606
lv_ac_db = lv_db_access.LiveAction.get_by_id(str(lv_ac_db.id))
615607
self.assertEqual(lv_ac_db.status, ac_const.LIVEACTION_STATUS_FAILED)
@@ -652,7 +644,7 @@ def test_fail_output_rendering(self):
652644
self.assertEqual(tk_ex_db.status, wf_statuses.SUCCEEDED)
653645
wf_ex_db = wf_db_access.WorkflowExecution.get_by_id(wf_ex_db.id)
654646
self.assertEqual(wf_ex_db.status, wf_statuses.FAILED)
655-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
647+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
656648

657649
lv_ac_db = lv_db_access.LiveAction.get_by_id(str(lv_ac_db.id))
658650
self.assertEqual(lv_ac_db.status, ac_const.LIVEACTION_STATUS_FAILED)
@@ -770,7 +762,7 @@ def test_fail_manually(self):
770762
}
771763
]
772764

773-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
765+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)
774766

775767
def test_fail_manually_with_recovery_failure(self):
776768
wf_file = 'fail-manually-with-recovery-failure.yaml'
@@ -833,4 +825,4 @@ def test_fail_manually_with_recovery_failure(self):
833825
}
834826
]
835827

836-
self.assertListEqual(self.sort_wf_runtime_errors(wf_ex_db.errors), expected_errors)
828+
self.assertListEqual(self.sort_workflow_errors(wf_ex_db.errors), expected_errors)

contrib/runners/orquesta_runner/tests/unit/test_functions_common.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ def test_data_functions_in_jinja(self):
163163
'data_query_1': ['foobar'],
164164
'data_pipe_str_1': '{"foo": {"bar": "foobar"}}',
165165
'data_none_str': data_funcs.NONE_MAGIC_VALUE,
166-
'data_str': 'foobar'
166+
'data_str': 'foobar',
167+
'data_list_str': '- a: 1\n b: 2\n- x: 3\n y: 4\n'
167168
}
168169

169170
self._execute_workflow(wf_name, expected_output)

fixed-requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ networkx==1.11
3333
python-keyczar==0.716
3434
cryptography==2.6.1
3535
retrying==1.3.3
36-
# Note: We use latest version of virtualenv which uses pip 9.0
37-
virtualenv==15.1.0
36+
# Note: We use latest version of virtualenv which uses pip 19
37+
virtualenv==16.6.0
3838
# NOTE: sseclient has various issues which sometimes hang the connection for a long time, etc.
3939
sseclient-py==1.7
4040
python-editor==1.0.4

0 commit comments

Comments
 (0)