Back to home page

Project CMSSW displayed by LXR

 
 

    


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