SMS triggers are checked from the client side. It is simple to reach a situation where triggers are not valid from the server side, and trigger related task may remain queued (deadlock).
To prevent that to happen, ecFlow triggers check is more robust:
As it is with the SMS, a ecFlow suite can be shared for team work. It is suite design and management skill to decide how to split the suite for a good collaboration within team members.
At ECMWF, operational suites are defined in files describing the full content. * the definition file is split into different python modules for
- observations retrieval
- analysis and forecast
- products generation and dissemination
- plots generation
The following example shows that with ecFlow
ecflow_client --load multi1.def
ecflow_client --replace /multi/main/00/test/fc_complete/test2 multi2.def
ecflow_client --replace /test20121123 multi3.def
python TestBench.py multi1.def
python TestBench.py multi3.def
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | suite limits
defstatus complete
limit power6 120
limit power7 120
limit prod 10
limit diss 10
limit test 10
endsuite
suite multi
family main
inlimit /limits:power6
repeat date YMD 20120101 20301212
family 00
family obs;
task get;
endfamily
family ana
trigger obs eq complete
task ifs
endfamily
family fc
trigger ana eq complete
task model
meter step -1 120
endfamily
family prod
inlimit /limits:prod
family 000;
trigger /multi/main/00/fc/model:step gt 0 or /multi/main/00/fc/model eq complete
task gen; endfamily
family 012;
trigger /multi/main/00/fc/model:step gt 12 or /multi/main/00/fc/model eq complete
task gen; endfamily
family 024;
trigger /multi/main/00/fc/model:step gt 24 or /multi/main/00/fc/model eq complete
task gen; endfamily
family 048;
trigger /multi/main/00/fc/model:step gt 48 or /multi/main/00/fc/model eq complete
task gen; endfamily
family 096;
trigger /multi/main/00/fc/model:step gt 96 or /multi/main/00/fc/model eq complete
task gen; endfamily
family 120;
trigger /multi/main/00/fc/model:step gt 120 or /multi/main/00/fc/model eq complete
task gen; endfamily
endfamily prod
family diss
inlimit /limits:diss
family 000;
trigger /multi/main/00/prod/000 eq complete
task gen; endfamily
family 012;
trigger /multi/main/00/prod/012 eq complete
task gen; endfamily
family 024;
trigger /multi/main/00/prod/024 eq complete
task gen; endfamily
family 048;
trigger /multi/main/00/prod/048 eq complete
task gen; endfamily
family 096;
trigger /multi/main/00/prod/096 eq complete
task gen; endfamily
family 120;
trigger /multi/main/00/prod/120 eq complete
task gen; endfamily
endfamily diss
family test
inlimit /limits:test
family fc_complete
trigger /multi/main/00/fc eq complete
task test1
endfamily
family prod_complete
trigger /multi/main/00/prod eq complete
task test1
endfamily
family diss
trigger /multi/main/00/diss eq complete
task test1
endfamily
endfamily
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | extern /limits:test
suite multi
defstatus suspended
family main
family 00
family test
family fc_complete
task test2
family fam_test
trigger test2 eq complete
task prepare
task process
trigger prepare eq complete
task push
trigger process eq complete
|
1 2 3 4 5 6 7 8 9 10 11 | extern /limits:test
extern /multi/main/00/fc/model:step
extern /multi/main:YMD
suite test20121123
defstatus suspended # so that it can be changed manually to queued
repeat date YMD 20120101 20301212
family test
repeat integer STEP 0 120
trigger /multi/main:YMD gt /test20121123:YMD or (/multi/main:YMD eq /test20121123:YMD and (/multi/main/00/fc/model:step ge /test20121123/test:STEP or /multi/main/00/fc/model eq complete))
task run
|