Warning, /FWCore/Framework/doc/RELEASE_NOTES.txt is written in an unsupported language. File is not indexed.
0001
0002 21-07-05, SA
0003
0004 Added Product Registration mechanism.
0005
0006 - EDProducer: Added product registration. Function produces<Product>("label")
0007 registers to an internal list, that then is read by the Worker
0008 that wraps the EDProducter
0009
0010 - InputSourceDescription: the ctor takes a ptr to ProductRegistry, that can
0011 then be accessed by the InputSource
0012
0013 - ProductRegistry: Added ProductRegistry, a list of ProductDescription objects,
0014 describing the products of all modules
0015
0016 - ScheduleBuilder: takes a ptr to the ProductRegistry in the ctor, then passes
0017 it to the workers via WorkerParams
0018
0019 - EventProcessor: FwkImpl now has in its data members a ProductRegistry object,
0020 and passes it to ScheduleBuilder and
0021 InputSource thru InputSourceDesc
0022
0023 - ProoducerWorker: Modified for ProductRegister machanism .Takes product infor-
0024 mations from the EDProducer and fills the ProductRegistry
0025
0026
0027 Added cppunit tests
0028
0029 18-07-05
0030
0031 First version of assert handling and plugin manager feedback handling
0032 designed to improve the error messages coming from the framework
0033 when really bad thing happen in the seal utilities. All the
0034 processing is in the ProblemTracker class and the example use is
0035 in cmsRun. This ProblemTracker class may need to be enhanced so
0036 framework code can add/subtract context information.
0037
0038 The first version of exception processing controls have been added.
0039 The parameter set file can contain directives to indicate the
0040 action that is supposed to happen when an exception is encountered.
0041 See Actions.h for the currently supported list. The roadmap will
0042 contain the instructions for use.
0043
0044 Converted the EventSetup-related exception to use cms::Exception.
0045 Since what is assumed virtual in these classes and the behavior
0046 has been changed so that the constructor generates the message,
0047 I suspect that we may see redundant information from derived
0048 classes (the what function is no longer solely in charge of
0049 adding data to the final message).
0050
0051 This first version has catches for all the various sorts of
0052 interesting thing in all the *Worker*.h classes. This is where
0053 the framework calls developer-written code. Currently the
0054 exceptions that we cannot process are just repropagated and a
0055 message is sent to cerr indicating the context. The cerr will
0056 turn into a message logger call when that interface is defined.
0057 The caught exceptions will probably be changed into new types
0058 and the beginning of the history will be used for altering program
0059 control. Weird exceptions are mapped into cms::Exceptions.
0060
0061 Converted the factory, worker registry, and maker classes to use
0062 a single struct WorkerParams instead of many individual arguments.
0063 This will hopefully help minimize changes to the factory interface
0064 in the future - although the struct data members still will need
0065 to be populated.
0066
0067 Added a contained class to EventRegistry to automate the add/remove
0068 of an event to make sure the operation is exception safe. Converted
0069 the EventProcessor to use this class.
0070
0071 Currently there is a lot of redundency in the exception processing
0072 code in the Worker cc files. Each of them look very similar.
0073 This code needs to be factored out.
0074
0075 The printing of the path name is missing in most of the output
0076 message from exception and from printouts from ignored exceptions.
0077
0078 01-11-05
0079
0080 Added a way to get at the InputSource from the EventProcessor interface.
0081
0082 22-01-06
0083
0084 output modules are not yet confined to endpaths.
0085
0086 A dependency on MessageLogger cannot be added to the Framework because the
0087 plugin manager dies during "load all capabilities" service initialization.
0088 This may be due to the fact that MessageLogger needs to use ModuleDescription
0089 in the Framework library. Anyway, there seems to be a problem with
0090 dependencies.
0091
0092 Currently the LogError and LogWarning calls are not made to the MessageLogger
0093 because of the crash problems. The Log.h file controls where the functions
0094 come from (local macros or MessageLogger API).
0095
0096 The TriggerResults product and the TriggerResultInserter producer are both
0097 contained within the Framework library. This is a temporary solution until
0098 we figure out how to split them out.
0099
0100 An on-demand report of path/worker stats in not available. The report only
0101 comes out at the endJob time. The report does not include work-in-path stats,
0102 only workers and paths.
0103
0104 A "TriggerResultsAnalzer" is needed that looks at the trigger result to see
0105 if it is correct or not. A test filter is needed that fails or succeed
0106 based on some configurable criteria (e.g. 50% pass or 1 out of N pass -
0107 prescale).
0108
0109 26-01-06
0110
0111 Things still missing:
0112 1) prepath/postpath callback for timing
0113 2) bitvector service for use in the output modules (bits to names mapping)
0114 3) move output modules to endpath and print warning
0115
0116 (2 and 3 are now complete)
0117
0118 The TriggerResult and TriggerNamesService do not have unit tests yet!
0119 The TriggerResult is valid in the output file.
0120 The OutputModules have not been modified to do writing based on bits.
0121
0122 28-01-06
0123
0124 Now triggerresults are only available if there is a filter in any
0125 path or if the is an untracked bool called makeTriggerResults set to
0126 true in the options pset of the process pset.
0127
0128 All the existing unit tests now work.
0129
0130 A TriggerResultInserter module only gets made if the TriggerResults
0131 object needs to be available.
0132
0133 Verified that all the service callback are being called correctly
0134 using the Tracer service.
0135
0136 29-01-06
0137
0138 Everything is working in the first release of the new scheduler with
0139 trigger results. Some of the things that need to be addressed:
0140
0141 1) The message logger is still not being used because of dependency
0142 problems.
0143 2) There is now a Producer, Product, and Service directly in the Framework
0144 library. There is a way to separate them out, if necessary, bu it is
0145 more than could be done in this release.
0146 3) The TriggerResults product is more complex than it needs to be. The
0147 stored entity is a vector<bool> instead of a bitbit<N> because I
0148 could not get the bitset working properly with ROOT.
0149 4) The path statistics report is somewhat crude and does not include
0150 information about the module-in-path. It only does module stats and
0151 path summary stats.
0152 5) There in no support in the parameter set language for addition
0153 path algebra. This includes inverting decisions of paths or modules
0154 and disabling modules in paths.
0155 6) The scheduler summary (paths/modules) in now going to what will be
0156 the message logger. Each line goes out as an individual message. This
0157 is undesirable behavior. The report should go to std::cout, meaning
0158 that routing cannot be easily done, or the report needs to be
0159 accumulated in an ostringstream and then sent as one message. I prefer
0160 this last option.
0161 7) Path pre/post signals posting is not implemented.
0162 8) The current statistics cannot be read out through an EventProcessor
0163 interface. This is interesting for the trigger so the control
0164 system can query a processor for current statistics.
0165
0166 The output modules, as of this date, have not been modified to
0167 include/exclude events based on trigger bits. They will need to
0168 account for cases where there are zero, one, or more TriggerResults
0169 objects in the event. The parameters must be able to choose the
0170 proper "process name".
0171
0172 As of this date, the TriggerResults interface has not been unit tested!
0173
0174 02-02-06
0175
0176 Currently the endpath processing is trivial. All modules in all
0177 endpaths see the event regardless of trigger bits or prior success/failure
0178 of modules in the endpaths. This means that if a filter-like path is
0179 in the endpath, it will not stop further processing in that endpath.
0180 This is unlike regular paths. This may need to be changed. Another
0181 issue is running endpath modules if all trigger bits are off. Should
0182 processing of this event be truncated if all bits are off?
0183
0184 The OutputModule modifications are complete for allowing selecting
0185 events based on trigger bits.
0186
0187 The unit testing is still not complete for TriggerResults. Only the
0188 functions that provide information to the outputmodule are tested.
0189
0190 03-02-06
0191
0192 List of tasks:
0193 1) assign module numbers to each module and make the total and the
0194 number available to Services during construction or through a signal.
0195 2) change the existing service over to use this instead of doing a
0196 lookup by module_label.
0197 3) finish automated unit testing of the TriggerResults and
0198 TriggerNamesService and Scheduler.
0199 4) Add path signals so that Services can track time spent in paths
0200 5) make an interface to retrieve the trigger summary info on demand as the
0201 program is running
0202 6) complete the module-by-path stats report at end of job
0203 7) fix the scheduler summary report (and others) so that the entire report
0204 comes out as a single LogMessage (not individual lines)
0205 8) need run info and process info stored in the output files. This includes
0206 parameter sets.
0207
0208 For event selection based on trigger bits, targeted TriggerResults from
0209 prior runs cannot be used until ParameterSets and additional run information
0210 are stored in the input file. The output module needs to translate the
0211 names from is configuration to bits in the TriggerResults at module
0212 construction time. The only way to do this is to get the names-to-bits
0213 information from the file header.
0214
0215 The endpath processing needs to be fixed. Use a second set of objects
0216 analogous to the path processing to do so. (place endpath modules into
0217 Paths whos results do not contribute to the saved TriggerResult)
0218
0219 To get the veto or inverted decision going for modules-in-paths, the
0220 temporary "Workers" collection needs to be pair<bool inverted, Worker*>
0221 instead of just the Worker*. The Path will need to take this
0222 and use it in the construction of the WorkerInPath.
0223
0224 Martin requested adding a vstring named "listOfTriggers" that can be
0225 used to explicitly list the paths that will have bits assigned to them.
0226 In addition, we need a control that stops event propagation through
0227 endpaths if all trigger bits are false. (the outputmodules in "veto"
0228 mode will not see these then).
0229
0230 03-02-06
0231
0232 completed unit test scripts testBits*.cfg that excerise the trigger bit
0233 logic. They also test the output module interface - in particular
0234 they test the event selection logic.
0235
0236 endpaths are now real paths
0237
0238 all output modules in regular paths now get moved to a single new endpath.
0239 if the output module makes a regular path empty, then that path is not
0240 included in the processing of the schedule.
0241
0242 the veto specification for modules in paths is complete. you can now
0243 place a ! in front of any module in a path and reverse its decision for
0244 that path only.
0245
0246 The "listOfTriggers" feature is still not complete. (see previous entry)
0247 One way this might work is to prepare a better PSet to give to
0248 the scheduler and the triggernameservice. The better one would have
0249 a list of trigger paths, a list of none-trigger paths, and a list of
0250 endpaths (or perhaps just move all none-trigger paths to endpaths.
0251 Must be careful here for bad interactions if paths are reordered.
0252 It should not matter since paths are supposed to be independent.
0253 Need to communicate a bit more with Martin about this reordering or
0254 marking.
0255
0256 Warning: the SelectEvents pset untracked option is not working properly
0257 because of problems in the parameterset library. The test scripts
0258 will need to be upgraded when it is fixed.
0259
0260 06-02-06
0261
0262 Now the listOfTriggers feature is complete. If the "options"
0263 pset of the process pset contains "makeTriggerResults", then the user
0264 is required to include "listOfTriggers". The list must be a subset
0265 of the list of paths. The list can have "*" as its first member, in
0266 which case all the paths are included. This feature is implemented
0267 using entirely in Schedule.cc. The test/testBitsCount.cfg script
0268 tests that a correctly specified listOfTriggers works properly; it
0269 does not check the bad cases.
0270
0271 10-04-06 jbk
0272
0273 The listOfTriggers information was not properly applied to both the
0274 TriggerNamesService and the Schedule. Although it was correct in the
0275 Schedule, the TriggerNameService never saw it and therefore OutputModules
0276 did not make the correct selection when listOfTriggers was set in the
0277 process pset options pset. Now the TriggerNameService calculates all the
0278 values needed for making the trigger bit mask and both the OutputModule
0279 and Schedule use its results.
0280
0281 Note: The code in Schedule:runOneEvent replies on the fact that trigger bits
0282 are assigned sequencially and the set contains only the paths that are
0283 labelled as trigger paths (included in listOfTriggers if it is present).
0284
0285 Note: The artificially generated "@trigger_paths" parameter (within
0286 @trigger_paths - yes, a bit obscure and confusing) is untracked. This
0287 may not be a good idea. To interpret bit names, care must be taken to
0288 make use of the "options" information i.e. listOfTriggers. We are ok for
0289 now because the TriggerResult caches the trigger names (because the psets
0290 were not stored in the output files when it was written). The TriggerResultInserter
0291 module relies on @trigger_paths to be the list of paths with listOfTriggers
0292 applied. If TriggerResults is modified to only hold the parameter set ID,
0293 then care must be taken to produce a trigger name list that applies the
0294 listOfTriggers. It might be as easy as making @trigger_paths (within
0295 @trigger_paths of process pset - can't forget that). tracked instead of untracked.
0296
0297 The set of tests has not been adjusted to check that listOfTriggers is
0298 functioning correctly in each release (I did a temporary mod in my own area
0299 to test it). The testBitsPass.cfg can be copied and modified to use a subset
0300 of the full path set in listOfTriggers and the pass/fail numbers can be
0301 verified (the run_trig*.sh script will need to be modified to include the
0302 new test case).
0303
0304 19-04-06 jbk
0305
0306 Added the state machine behavior to the event processor. All tests run.
0307 There are a number of ugly things. See the comments in the state table
0308 in EventProcessor.cc. Right now the state does not go to "Error" if
0309 a "beginJob" of a module throws an exception (unlike "run"). There is
0310 also a check at the front of beginJob that makes sure we are coming from
0311 the correct state. There is a state diagram at
0312 https://uimon.cern.ch/twiki/bin/view/CMS/EventProcessorStateHandlingProposal
0313 that is at this time up to date. The "testFramework" test runs without
0314 modification. The "Running" state should probably be "RunningAsync" and
0315 "RunningSync". There is no checked-in test for "runAsync".
0316 Timing scenario are not complete.
0317
0318 This feature includes having the event loop run in its own thread and being
0319 able to ask it to shut it down. Signal USR2 can be sent to cmsRun and have
0320 the event processor finished up its work and shut down cleanly.
0321
0322 Still missing or incomplete:
0323 * total event timeout
0324 * Schedule features from EventFilter-land like global prescales and endpath
0325 disabling.
0326 * waiting up input sources that are blocking if a stop signal arrives
0327 * interface that gives out const module lists so that parameters and names
0328 can be inspected by applications.
0329 * interface to get at statistics in the Schedule object
0330
0331 16-03-07 jbk
0332
0333 Updated the async run/shutdown/stop/wait calls.
0334 If the event loop stops before wait or the other calls are made, they
0335 will just return successfully now.
0336 The shutdown/stop/wait commands now take a timeout value. If the timeout
0337 happens, then the event loop thread is assumed to be stuck (either in
0338 I/O or an infinite loop). The thread is cancelled (using cancel policy
0339 asynchronous meaning immediately). The state of the event processor
0340 is marked as "error". It is likely that resources have been leaked or
0341 stuck in an invalid state at this point and the program should be shut
0342 down. All the shutdown/wait/stop calls now return a "timedout" return
0343 code if they time out.
0344
0345 Added a series of tests to eventprocessor_t.cpp that run the
0346 async event loop and attempt to time out. The time out test is
0347 commented out due to a runtime error from the environment connected to
0348 pthread_cancel libraries.
0349
0350 added states:
0351 { sJobReady, mStopAsync, sJobReady },
0352 { sJobReady, mCountComplete, sJobReady },
0353 { sStopping, mCountComplete, sJobReady },
0354 { sStopping, mShutdownAsync, sShuttingDown },
0355 { sStopping, mStopAsync, sStopping },
0356
0357 The task_id_set / stop_count variables are overly complicated and need
0358 to be simplified. The count contain all the necessary information to
0359 known if a task ID is present or not.
0360