The Gaudi Framework  master (37c0b60a)
SubSlotVsSlotIsolation.py
Go to the documentation of this file.
1 #!/usr/bin/env gaudirun.py
2 
12 """
13 A test for isolating sub-slot data from the parent slot.
14 The main sequence has two steps of creating and running sub-events.
15 
16 The ViewTester is an algorithm specifically designed to create sub-event
17 contexts, pass them to the scheduler, and report on the current context.
18 
19 Seven instances of ViewTester are used as follows:
20  - Algorithm A1 creates a sub-event context
21  - Algorithms A2 and A3 run within the sub-event, sharing data
22  - Algorithm A4 creates another sub-event contexts, and a data output
23  - Algorithms A5 and A6 run within the new sub-event, but cannot access data from A4
24  - Algorithm A7 runs in the whole event context, after the sub-events
25 
26 The test should stall if isolation is working
27 """
28 
29 from Configurables import (
30  AlgResourcePool,
31  AvalancheSchedulerSvc,
32  Gaudi__Sequencer,
33  HiveSlimEventLoopMgr,
34  HiveWhiteBoard,
35  Test__ViewTester,
36 )
37 from Gaudi.Configuration import *
38 
39 # metaconfig -------------------------------------------------------------------
40 # It's confortable to collect the relevant parameters at the top of the optionfile
41 evtslots = 1
42 evtMax = 1
43 cardinality = 1
44 threads = 1
45 viewsPerEvt = 1
46 # -------------------------------------------------------------------------------
47 
48 # The configuration of the whiteboard ------------------------------------------
49 # It is useful to call it EventDataSvc to replace the usual data service with
50 # the whiteboard transparently.
51 
52 whiteboard = HiveWhiteBoard("EventDataSvc", EventSlots=evtslots)
53 
54 # -------------------------------------------------------------------------------
55 
56 # Event Loop Manager -----------------------------------------------------------
57 # It's called slim since it has less functionalities overall than the good-old
58 # event loop manager. Here we just set its outputlevel to DEBUG.
59 
60 slimeventloopmgr = HiveSlimEventLoopMgr(
61  SchedulerName="AvalancheSchedulerSvc", OutputLevel=DEBUG
62 )
63 
64 # -------------------------------------------------------------------------------
65 
66 # ForwardScheduler -------------------------------------------------------------
67 # We just decide how many algorithms in flight we want to have and how many
68 # threads in the pool. The default value is -1, which is for TBB equivalent
69 # to take over the whole machine.
70 
71 scheduler = AvalancheSchedulerSvc(
72  ThreadPoolSize=threads, OutputLevel=INFO, VerboseSubSlots=True
73 )
74 
75 # -------------------------------------------------------------------------------
76 
77 # Algo Resource Pool -----------------------------------------------------------
78 # Nothing special here, we just set the debug level.
79 AlgResourcePool(OutputLevel=DEBUG)
80 
81 # -------------------------------------------------------------------------------
82 
83 # Set up of the crunchers, daily business --------------------------------------
84 
85 a1 = Test__ViewTester("A1")
86 a1.baseViewName = "viewOne"
87 a1.viewNumber = viewsPerEvt
88 a1.viewNodeName = "viewNodeOne"
89 
90 a2 = Test__ViewTester("A2")
91 a2.viewNodeName = ""
92 a2.outKeys = ["/Event/a2"]
93 
94 a3 = Test__ViewTester("A3")
95 a3.viewNodeName = ""
96 a3.inpKeys = ["/Event/a2"] # Should be able to load a2 from the shared sub-slot
97 
98 a4 = Test__ViewTester("A4")
99 a4.baseViewName = "viewTwo"
100 a4.viewNumber = viewsPerEvt
101 a4.viewNodeName = "viewNodeTwo"
102 a4.outKeys = ["/Event/a4"]
103 
104 a5 = Test__ViewTester("A5")
105 a5.viewNodeName = ""
106 a5.inpKeys = ["/Event/a4"] # Should not be able to load a4 from the "whole event" slot
107 
108 a6 = Test__ViewTester("A6")
109 a6.viewNodeName = ""
110 
111 a7 = Test__ViewTester("A7")
112 a7.viewNodeName = ""
113 
114 for algo in [a1, a2, a3, a4, a5, a6, a7]:
115  algo.Cardinality = cardinality
116  algo.OutputLevel = DEBUG
117 
118 viewNodeOne = Gaudi__Sequencer(
119  "viewNodeOne", Members=[a2, a3], Sequential=False, ShortCircuit=False
120 )
121 
122 viewNodeTwo = Gaudi__Sequencer(
123  "viewNodeTwo", Members=[a5, a6], Sequential=False, ShortCircuit=False
124 )
125 
126 createViewSeq = Gaudi__Sequencer(
127  "createViewSeq",
128  Members=[a1, viewNodeOne, a4, viewNodeTwo, a7],
129  Sequential=True,
130  OutputLevel=VERBOSE,
131 )
132 
133 # Application Manager ----------------------------------------------------------
134 # We put everything together and change the type of message service
135 
137  EvtMax=evtMax,
138  EvtSel="NONE",
139  ExtSvc=[whiteboard],
140  EventLoop=slimeventloopmgr,
141  TopAlg=[createViewSeq],
142  MessageSvcType="InertMessageSvc",
143 )
144 
145 # -------------------------------------------------------------------------------
Gaudi.Configuration
Definition: Configuration.py:1
ApplicationMgr
Definition: ApplicationMgr.h:57