Classes | Functions | Variables
fhiclcpp/doc/fhiclcpp_threading_notes_supporting_details.txt File Reference

Classes

class  name_
 
class  names_
 
class  key_
 

Functions

Thread safety summary Safe binding_modifier h exception cc exception h fwd h ParameterArgumentTypes h parse_shims cc parse_shims h parse_shims_opts h print_mode h Protection cc Protection h tokens h type_traits_error_msgs h type_traits h validationException h(unused) Not Safe Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DatabaseSupport.cc DatabaseSupport.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h Indentation.h KeyAssembler.cc KeyAssembler.h KeysToIgnore.h(testing only) MaybeDisplayParent.cc MaybeDisplayParent.h Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterBase.h ParameterMetadata.h ParameterSet.cc ParameterSet.h ParameterSetID.cc ParameterSetID.h ParameterSetImplHelpers.h ParameterSetRegistry.cc ParameterSetRegistry.h ParameterSetWalker.h ParameterWalker.h Prettifier.cc Prettifier.h PrettifierAnnotated.cc PrettifierAnnotated.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h coding.cc coding.h encode_extended_value.cc encode_extended_value.h extended_value.cc extended_value.h intermediate_table.cc intermediate_table.h make_ParameterSet.cc make_ParameterSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h parse.cc parse.h printing_helpers.cc printing_helpers.h stdmap_shims.h strip_containing_names.cc strip_containing_names.h try_blocks.h-----Thread-safety summary by subsystem and component.Parameter File Parsing extended_value.cc extended_value.h Protection.cc Protection.h stdmap_shims.h intermediate_table.cc intermediate_table.h parse.cc parse.h tokens.h binding_modifier.h parse_shims.cc parse_shims.h parse_shims_opts.h encode_extended_value.cc encode_extended_value.h coding.cc coding.h Parameter Storage/Retrieval DatabaseSupport.cc DatabaseSupport.h ParameterSet.cc ParameterSet.h ParameterSetImplHelpers.h try_blocks.h KeyAssembler.cc KeyAssembler.h ParameterSetID.cc ParameterSetID.h ParameterSetRegistry.cc ParameterSetRegistry.h fwd.h make_ParameterSet.cc make_ParameterSet.h Parameter Validation Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h KeysToIgnore.h(testing only) Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterArgumentTypes.h ParameterBase.h ParameterMetadata.h ParameterWalker.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h strip_containing_names.cc strip_containing_names.h type_traits_error_msgs.h validationException.h(unused) Parameter Pretty-Printing Indentation.h MaybeDisplayParent.cc MaybeDisplayParent.h PrettifierAnnotated.cc PrettifierAnnotated.h Prettifier.cc Prettifier.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h printing_helpers.cc printing_helpers.h print_mode.h Parameter Utility Routines ParameterSetWalker.h exception.cc exception.h type_traits.h-----boost THREADING CALLED ONLY AT lib which is PROGRAM global destructor time ParameterSetRegistry ()-THREADING-+ParameterSetRegistry(ParameterSet const &)=delete
 
 ParameterSetRegistry (ParameterSet &&)=delete
 
The instance_ () private static member function manages a function-local static variable s_registry which is the process-wide single instance of the ParameterSetRegistry class.This means the private default const ructor with no arguments is run the first time the instance_() function is executed.It is worth noting that the C++Standard guarantees that function local static initialization is thread-safe and that g++does correctly implement this requirement using a critical section.The first time the instance_() function is run is in art
 
The private default constructor with no arguments first calls openPrimaryDB () to initialize the primaryDB_ data member
 
The private default constructor with no arguments first calls then sets stmt_ to the and then default initializes the registry_ data member it would be better to initialize primaryDB_ to and then calls sqlite3_exec () to create the ParameterSets table.On failure of either step throwOnSQLiteFailure() is called.The creation of the ParameterSets table is done in a transaction so either it appears
 
The private default constructor with no arguments first calls then sets stmt_ to the and then default initializes the registry_ data member it would be better to initialize primaryDB_ to and then calls or on error it does there will never be a partially created table The throwOnSQLiteFailure () function is passed a local database pointer and a local pointer to the sql error message which was created by sqlite3.It copies the message and uses sqlite3_free to release the message storage.If the database pointer is the nullptr it throws a fhicl::exception. Otherwise it calls sqlite3_errcode to retrieve the pending error code from sqlite and then uses sqlite3_errstr to translate the code to a message. Then it calls sqlite3_errmsg passing it the local database pointer to retrieve further information. Then it throws a fhicl::exception. THREADING - ParameterSetRegistry construction is not thread-safe. The uses of sqlite3 interfaces in the ParameterSetRegistry private default constructor with no arguments form a transaction that must not be interleaved with another attempted construction. The thread-safety of sqlite3 is not clear, callgrind traces show that pthread mutexes are being used, so there is some attempt being made, must investigate interactions with tbb. THREADING - sqlite3 thread-safety uses pthread, is it compatible with tbb? Construction of the ParameterSetRegistry should not be interleaved with any other uses of the sqlite3 interfaces to manipulate the parameter set database. And possibly should not be mixed with any other used of sqlite3, this needs further investigation. Careful thought must also be given to the interaction of exception handling with the thread tasking system in use. THREADING - Must know how throwing an exception in a thread safely shuts down the other threads. THREADING - Nearly all ParameterSetRegistry interfaces use instance_() and so may result in construction of the singleton instance at a time when it is not safe. ----- Detailed source-based analysis of ParameterSet::put(string const&, extended_value const&) template<> void ParameterSet:: put(string const& key, extended_value const& value) auto insert = [this, &key, &value]() insert_(key, boost::any(detail::encode(value)))
 
THREADING encode may do a any const &value check_put_local_key (key)
 
 check_put_local_key (string const &key) if(key.find('.')!
 
 if (!mapping_.emplace(key, value).second)-THREADING-throw exception(cant_insert)<< "key "<< key<< " already exists."
 
id_ invalidate ()
 
THREADING fill_src_info (value, key, srcMapping_)
 
 fill_src_info (extended_value const &value, string const &key, ParameterSet::annot_t &src_map) src_map[key]
 
THREADING if (!value.is_a(SEQUENCE)) return
 
size_t i (0)
 
 for (auto const &xval:extended_value::sequence_t(value))-THREADING-ostringstream oss
 
 oss<< key<< "["<< i++<< "]";src_map[oss.str()]=xval.src_info;-THREADING-fill_src_info(xval, oss.str(), src_map);-THREADING-detail::try_insert(insert, key);...runs insert(), throws on error, uses key for error msg-----Analyzed by callgrind.make_ParameterSet(intermediate_table const &, ParameterSet &) ParameterSet::put< extended_value > (string const &key, extended_value const &value) detail
 
 tables () const
 
 last () const
 
name_ string indices_ vector SequenceKey string const name, vector const indices name_ name () const
 
 indices () const
 
keys erase (remove(keys.begin(), keys.end(),""), keys.end())
 
 if (keys.empty())
 
keys pop_back ()
 
return descend_ (keys.tables(), ps)?ps.get_one_(keys.last()
 
 for (auto const &table:names).........if(!p-> get_one_(table, tmp)) return false
 
 R ((\]\[|\[|\]))")
 
tokens erase (tokens.begin())
 
THREADING if (iter==mapping_.end()) return false-THREADING-......auto a
 
ifiter ()) return false;.........a=seq[*iter];.........return find_an_any(++it, cend, a
 
THREADING if (iter!=registry_.cend()) return iter
 
THREADING if (stmt_==nullptr)-THREADING-..................sqlite3_prepare_v2(primaryDB_
 
 make_ParameterSet (reinterpret_cast< char const * >(sqlite3_column_text(stmt_, 0)), pset)
 
 parse_document (string, tbl)
 
 make_ParameterSet (tbl, ps)
 
THREADING sqlite3_reset (stmt_)
 
 catch (exception const &e)......ostringstream errmsg
 
 make_ParameterSet (raw_config, main_pset)
 
 make_ParameterSet (psEntry.second.pset_, pset)
 
void make_ParameterSet (string const &str, ParameterSet &pset)...intermediate_table tbl
 
 parse_document (str, tbl)
 
void make_ParameterSet (string const &filename, cet::filepath_maker &, ParameterSet &pset)...intermediate_table tbl
 
 parse_document (filename, maker, tbl)
 
 for (auto I=tbl.begin(), E=tbl.end();I!=E;++I).........if(!I-> second.in_prolog) ............pset.put(I->first, I->second)
 
try make_ParameterSet (fname,*policy_ptr, pset)
 
 catch (cet::exception &e) cerr<< "Configuration file \""<< fname<< "\" "<< "parsing failed with exception "<< e.what()<< ".\n"<< "Default configuration will be used instead.\n"
 
string const pstr (ss.str())
 
 make_ParameterSet (pstr, pset)
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and tableids (@id::[0-9A-Fa-f]+)(hex representation of a ParameterSetID).enum value_tag UNKNOWN
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and TABLEID enum Protection PROTECT_IGNORE PROTECT_ERROR unsigned char NONE to_string (Protection p)
 
 extended_value (bool in_prolog, value_tag tag, boost::any value, Protection protection, string const &src={})
 
 extended_value (bool in_prolog, value_tag tag, boost::any value, string const &src={})
 
is_a(value_tag t) const empty () const
 
names_ vector instance () static
 
bool is_sequence (par_type const pt)
 
bool is_table (par_type const pt)
 
key_ string ParameterMetadata ()=default+ParameterMetadata(Name const &name
 
 TableMemberRegistry ()=default+TableMemberRegistry(TableMemberRegistry const &)=delete+TableMemberRegistry(TableMemberRegistry &&)=delete+TableMemberRegistry &operator
 
value_ Comment ("")}
 
 Atom (Name &&name, Comment &&comment) explicit
 
 Atom (Name &&name, Comment &&comment, function< bool()> maybeUse) explicit
 
 Atom (Name &&name, T const &dflt_value) explicit
 
 Atom (Name &&name, Comment &&comment, T const &dflt_value) explicit
 
 Atom (Name &&name, Comment &&comment, function< bool()> maybeUse, T const &dflt_value) explicit
 
 operator() () const
 

Variables

Thread safety summary Safe binding_modifier h exception cc exception h fwd h ParameterArgumentTypes h parse_shims cc parse_shims h parse_shims_opts h print_mode h Protection cc Protection h tokens h type_traits_error_msgs h type_traits h validationException h(unused) Not Safe Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DatabaseSupport.cc DatabaseSupport.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h Indentation.h KeyAssembler.cc KeyAssembler.h KeysToIgnore.h(testing only) MaybeDisplayParent.cc MaybeDisplayParent.h Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterBase.h ParameterMetadata.h ParameterSet.cc ParameterSet.h ParameterSetID.cc ParameterSetID.h ParameterSetImplHelpers.h ParameterSetRegistry.cc ParameterSetRegistry.h ParameterSetWalker.h ParameterWalker.h Prettifier.cc Prettifier.h PrettifierAnnotated.cc PrettifierAnnotated.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h coding.cc coding.h encode_extended_value.cc encode_extended_value.h extended_value.cc extended_value.h intermediate_table.cc intermediate_table.h make_ParameterSet.cc make_ParameterSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h parse.cc parse.h printing_helpers.cc printing_helpers.h stdmap_shims.h strip_containing_names.cc strip_containing_names.h try_blocks.h-----Thread-safety summary by subsystem and component.Parameter File Parsing extended_value.cc extended_value.h Protection.cc Protection.h stdmap_shims.h intermediate_table.cc intermediate_table.h parse.cc parse.h tokens.h binding_modifier.h parse_shims.cc parse_shims.h parse_shims_opts.h encode_extended_value.cc encode_extended_value.h coding.cc coding.h Parameter Storage/Retrieval DatabaseSupport.cc DatabaseSupport.h ParameterSet.cc ParameterSet.h ParameterSetImplHelpers.h try_blocks.h KeyAssembler.cc KeyAssembler.h ParameterSetID.cc ParameterSetID.h ParameterSetRegistry.cc ParameterSetRegistry.h fwd.h make_ParameterSet.cc make_ParameterSet.h Parameter Validation Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h KeysToIgnore.h(testing only) Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterArgumentTypes.h ParameterBase.h ParameterMetadata.h ParameterWalker.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h strip_containing_names.cc strip_containing_names.h type_traits_error_msgs.h validationException.h(unused) Parameter Pretty-Printing Indentation.h MaybeDisplayParent.cc MaybeDisplayParent.h PrettifierAnnotated.cc PrettifierAnnotated.h Prettifier.cc Prettifier.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h printing_helpers.cc printing_helpers.h print_mode.h Parameter Utility Routines ParameterSetWalker.h exception.cc exception.h type_traits.h-----boost THREADING CALLED ONLY AT lib unload
 
Thread safety summary Safe binding_modifier h exception cc exception h fwd h ParameterArgumentTypes h parse_shims cc parse_shims h parse_shims_opts h print_mode h Protection cc Protection h tokens h type_traits_error_msgs h type_traits h validationException h(unused) Not Safe Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DatabaseSupport.cc DatabaseSupport.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h Indentation.h KeyAssembler.cc KeyAssembler.h KeysToIgnore.h(testing only) MaybeDisplayParent.cc MaybeDisplayParent.h Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterBase.h ParameterMetadata.h ParameterSet.cc ParameterSet.h ParameterSetID.cc ParameterSetID.h ParameterSetImplHelpers.h ParameterSetRegistry.cc ParameterSetRegistry.h ParameterSetWalker.h ParameterWalker.h Prettifier.cc Prettifier.h PrettifierAnnotated.cc PrettifierAnnotated.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h coding.cc coding.h encode_extended_value.cc encode_extended_value.h extended_value.cc extended_value.h intermediate_table.cc intermediate_table.h make_ParameterSet.cc make_ParameterSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h parse.cc parse.h printing_helpers.cc printing_helpers.h stdmap_shims.h strip_containing_names.cc strip_containing_names.h try_blocks.h-----Thread-safety summary by subsystem and component.Parameter File Parsing extended_value.cc extended_value.h Protection.cc Protection.h stdmap_shims.h intermediate_table.cc intermediate_table.h parse.cc parse.h tokens.h binding_modifier.h parse_shims.cc parse_shims.h parse_shims_opts.h encode_extended_value.cc encode_extended_value.h coding.cc coding.h Parameter Storage/Retrieval DatabaseSupport.cc DatabaseSupport.h ParameterSet.cc ParameterSet.h ParameterSetImplHelpers.h try_blocks.h KeyAssembler.cc KeyAssembler.h ParameterSetID.cc ParameterSetID.h ParameterSetRegistry.cc ParameterSetRegistry.h fwd.h make_ParameterSet.cc make_ParameterSet.h Parameter Validation Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h KeysToIgnore.h(testing only) Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterArgumentTypes.h ParameterBase.h ParameterMetadata.h ParameterWalker.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h strip_containing_names.cc strip_containing_names.h type_traits_error_msgs.h validationException.h(unused) Parameter Pretty-Printing Indentation.h MaybeDisplayParent.cc MaybeDisplayParent.h PrettifierAnnotated.cc PrettifierAnnotated.h Prettifier.cc Prettifier.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h printing_helpers.cc printing_helpers.h print_mode.h Parameter Utility Routines ParameterSetWalker.h exception.cc exception.h type_traits.h-----boost THREADING CALLED ONLY AT lib which is PROGRAM EXIT
 
operator=(ParameterSet const &)=delete art art Framework IO Root config_dumper cc
 
art art Framework Principal Event ps = *p
 
art art Framework Principal Run temp
 
The private default constructor with no arguments first calls then sets stmt_ to the nullptr
 
The private default constructor with no arguments first calls then sets stmt_ to the and then default initializes the registry_ data member FIXME
 
The private default constructor with no arguments first calls then sets stmt_ to the and then default initializes the registry_ data member it would be better to initialize primaryDB_ to and then calls or on error it does not
 
return get_if_present (key, result)?result
 
return T &value const auto keys = detail::get_names(key)
 
 __pad0__
 
string const last = keys.back()
 
return Keys {keys, last}
 
return value
 
 __pad1__
 
ParameterSet &ps const ParameterSet constp {this}
 
ParameterSet tmp
 
return true
 
 __pad2__
 
T &value const try auto skey = detail::get_sequence_indices(key)
 
 __pad3__
 
auto const name = tokens.front()
 
vector< size_t > indices
 
return SequenceKey {name, indices}
 
map< string, boost::any >::const_iterator iter = mapping_.find(skey.name())
 
if(!detail::find_an_any(skey.indices().cbegin(), skey.indices().cend(), a)) throw exception(error __pad4__
 
if(!detail::find_an_any(skey.indices().cbegin(), skey.indices().cend(), a)) throw exception(error cit_size_t const cend
 
auto const seq = boost::any_cast<ps_sequence_t>(a)
 
THREADING problem if a is a ParameterSetID and value is a ParameterSet
 
THREADING problem if a is a ParameterSetID and value is a ParameterSet &result ParameterSetID id = any_cast<ParameterSetID>(a)
 
 result = ParameterSetRegistry::get(id)
 
THREADING __pad5__
 
THREADING __pad6__
 
THREADING SELECT PSetBlob FROM ParameterSets WHERE ID = ?
 
stmt_
 
THREADING auto idString = id.to_string()
 
THREADING switch(result)..................case SQLITE_DONE case SQLITE_ROW
 
THREADING __pad7__
 
THREADING pset
 
intermediate_table tbl
 
 __pad8__
 
THREADING break
 
default __pad9__
 
if(iter==cend()) throw exception(error THREADING return iter second
 
mapping_ __pad10__
 
mapping_ boost::any THREADING all three data members must be interlocked against writers srcMapping_
 
mapping_ boost::any THREADING all three data members must be interlocked against writers string THREADING all three data members must be interlocked against writers id_
 
mapping_ boost::any THREADING all three data members must be interlocked against writers string THREADING all three data members must be interlocked against writers bool annotate const
 
mapping_ boost::any THREADING all three data members must be interlocked against writers string THREADING all three data members must be interlocked against writers bool annotate detail::print_mode pm T &value T T convert(Via const &)) const for auto & handler
 
mapping_ boost::any THREADING all three data members must be interlocked against writers string THREADING all three data members must be interlocked against writers bool annotate detail::print_mode pm T &value T T convert(Via const &)) const for auto raw_config
 
 maker_
 
ParameterSet main_pset
 
iterate over intermediate table use ParameterSet::put(key, value) ParameterSetRegistry o root input files
 
iterate over intermediate table use ParameterSet::put(key, value) ParameterSetRegistry o root input parameter set blobs and the newer per file db Uses
 
and __pad11__
 
copies from on disk db into in memory db
 
Or __pad12__
 
o encode called by ParameterSet::put() Uses And
 
return default_config
 
And __pad13__
 
This is the output of a fcl file parse
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold values
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold sequences
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold tables
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and NIL
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and BOOL
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and NUMBER
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and COMPLEX
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and STRING
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and SEQUENCE
 
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and TABLE
 
key_ string Comment constcomment = Comment("")
 
key_ string Comment const par_style const parStyle = par_style::NTYPES
 
key_ string Comment const par_style const par_type const parType
 
tables_ __pad14__
 
return registry
 
value_ __pad15__
 

Function Documentation

Atom ( Name &&  name,
Comment &&  comment 
)

Definition at line 1538 of file fhiclcpp_threading_notes_supporting_details.txt.

1539  : AtomBase{move(name), move(comment), par_style::REQUIRED, detail::AlwaysUse()}
1540  , RegisterIfTableMember{this}
1541  , value_{make_shared<T>()}
1542  {
1543  NameStackRegistry::end_of_ctor();
1544  }
key_ string Comment const & comment
std::function< bool()> AlwaysUse()
Atom ( Name &&  name,
Comment &&  comment,
function< bool()>  maybeUse 
)

Definition at line 1546 of file fhiclcpp_threading_notes_supporting_details.txt.

1547  : AtomBase{move(name), move(comment), par_style::REQUIRED_CONDITIONAL, maybeUse}
1548  , RegisterIfTableMember{this}
1549  , value_{make_shared<T>()}
1550  {
1551  NameStackRegistry::end_of_ctor();
1552  }
key_ string Comment const & comment
Atom ( Name &&  name,
T const dflt_value 
)

Definition at line 1554 of file fhiclcpp_threading_notes_supporting_details.txt.

1555  : Atom{move(name)
1556  , Comment("")
1557  , dflt_value}
1558  {}
Atom(Name &&name, Comment &&comment) explicit
Atom ( Name &&  name,
Comment &&  comment,
T const dflt_value 
)

Definition at line 1560 of file fhiclcpp_threading_notes_supporting_details.txt.

1561  : AtomBase{move(name), move(comment), par_style::DEFAULT, detail::AlwaysUse()}
1562  , RegisterIfTableMember{this}
1563  , value_{make_shared<T>(dflt_value)}
1564  {
1565  NameStackRegistry::end_of_ctor();
1566  }
key_ string Comment const & comment
std::function< bool()> AlwaysUse()
Atom ( Name &&  name,
Comment &&  comment,
function< bool()>  maybeUse,
T const dflt_value 
)

Definition at line 1568 of file fhiclcpp_threading_notes_supporting_details.txt.

1569  : AtomBase{move(name), move(comment), par_style::DEFAULT_CONDITIONAL, maybeUse}
1570  , RegisterIfTableMember{this}
1571  , value_{make_shared<T>(dflt_value)}
1572  {
1573  NameStackRegistry::end_of_ctor();
1574  }
key_ string Comment const & comment
catch ( exception const e)
catch ( cet::exception &  e)
THREADING encode may do a any const& value check_put_local_key ( key  )
check_put_local_key ( string const key)
value_ Comment ( ""  )

Definition at line 1535 of file fhiclcpp_threading_notes_supporting_details.txt.

1536  {}
return descend_ ( keys.  tables(),
ps   
)
is_a (value_tag t) const empty ( ) const

Definition at line 1325 of file fhiclcpp_threading_notes_supporting_details.txt.

1325  : bool
1326  + exists(string const& name) const : bool
1327  + erase(string const& name, bool in_prolog = false) : void
1328  + get(string const& name) : template<typename T> T
1329  + put(string const& name, string const& value, bool in_prolog = false) : bool
1330  + put(string const& name, char const* value, bool in_prolog = false) : bool
1331  + put(string const& name, bool value, bool in_prolog = false) : bool
1332  + put(string const& name, complex<T> const& value, bool in_prolog = false) : template<typename T> bool
1333  + put(string const& name, vector<T> const& value, bool in_prolog = false) : template<typename T> bool
1334  + put( string const& name, T value, bool in_prolog = false) : template<typename T> typename enable_if<tt::is_numeric<T>::value, bool>::type
1335  + putEmptySequence(string const& name, bool in_prolog = false) : bool
1336  + putEmptyTable(string const& name, bool in_prolog = false) : bool
1337  + putNil(string const& name, bool in_prolog = false) : bool
1338 
1339  + begin() const : const_iterator
1340  + end() const : const_iterator
1341 
1342  + insert(string const& name, bool in_prolog, value_tag tag, boost::any const& value) : bool
1343  + insert(string const& name, extended_value const& value) : bool
1344  + insert(string const& name, extended_value&& value) : bool
1345 
1347  + locate(string const& name) : extended_value*
1348  + update(string const& name) : extended_value&
1349 
1350 -----
1351 
1353 
1354 -----
1355 
1356 + get_regex_replace_str(string const& istr) : string const { static regex const r("\\[|\\]"); auto ostr = regex_replace(istr, r, "\\$&"); return ostr; }
1357 
1358 struct Name
1359 
1360  + value : string
1361 
1362  - index(size_t const i) static : string { return "[" + to_string(i) + "]"; }
1363  + sequence_element(size_t const i) static : Name { return Name{index(i)}; }
1364  + sequence_element(string const& key_stem, size_t const i) static : Name { return Name{key_stem + index(i)}; }
1365  + regex_safe(string const& key) static : string { return fhicl::get_regex_replace_str(key); }
1366 
1367  + Name(string const& name = "") explicit : value(name) {}
std::string const get_regex_replace_str(std::string const &istr)
Definition: Name.cc:8
std::is_arithmetic< T > is_numeric
Definition: type_traits.h:72
void Validation()
Definition: Validation.cpp:272
Definition: InputTag.h:8
size_t i(0)
std::string string
Definition: nybbler.cc:12
std::pair< std::string, double > Parameter
bool exists(std::string path)
The Standard available from< memory > inherited from C(deprecated)*``std event put(std::move(myProdPtr))
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
Definition: DumpUtils.h:265
Definition: type_traits.h:56
auto get(MyTuple< T... > const &t) -> decltype(auto)
extended_value(bool in_prolog, value_tag tag, boost::any value, Protection protection, string const &src={})
auto begin(Data< Value > const &data)
these are called *plugin *libraries Plugin libraries are loaded by the *LibraryManager *see above The source file in which a module is implemented must be named< module > _plugin cc It must contain an invocation of the *DEFINE_EDM_PLUGIN *macro The *DEFINE_EDM_PLUGIN *macro is responsible for writing the appropriate *factory **function and that takes a const reference to a *ParameterSet *and that returns a newly created instance of the associated module type
auto end(Data< Value > const &data)
keys erase(remove(keys.begin(), keys.end(),""), keys.end())
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and TABLEID enum Protection PROTECT_IGNORE PROTECT_ERROR unsigned char NONE to_string(Protection p)
mapping_ boost::any THREADING all three data members must be interlocked against writers string THREADING all three data members must be interlocked against writers bool annotate const
std::string Name
const double T[4]
Definition: LAr.C:73
thus any information present in the drop and needed by the server needs to be added into the ErrorObject that will cross the client server boundary MessageLogger h uses the MessageDrop in the LogDebug macro to learn the value of debugEnabled If debugEnabled is set to false
keys erase ( remove(keys.begin(), keys.end(),"")  ,
keys.  end() 
)
tokens erase ( tokens.  begin())
extended_value ( bool  in_prolog,
value_tag  tag,
boost::any  value,
Protection  protection,
string const src = {} 
)

Definition at line 1265 of file fhiclcpp_threading_notes_supporting_details.txt.

1265 {}) : in_prolog(in_prolog) , tag(tag) , value(value) , src_info(src) , protection(protection) {}
extended_value ( bool  in_prolog,
value_tag  tag,
boost::any  value,
string const src = {} 
)

Definition at line 1266 of file fhiclcpp_threading_notes_supporting_details.txt.

1266 {}) : in_prolog(in_prolog) , tag(tag) , value(value) , src_info(src) , protection(Protection::NONE) {}
THREADING fill_src_info ( value  ,
key  ,
srcMapping_   
)
fill_src_info ( extended_value const value,
string const key,
ParameterSet::annot_t &  src_map 
)
for ( auto const xval:extended_value::sequence_tvalue)
for ( auto const &table:names  ) -> get_one_(table, tmp)) return false
for ( auto  I = tbl.begin(),
E  = tbl.end();I!=E;++I 
) -> second.in_prolog) ............pset.put(I->first, I->second)
size_t i ( )
if ( !mapping_.emplace(key, value).  second)
THREADING if ( !value.  is_aSEQUENCE)
if ( keys.  empty())

Definition at line 727 of file fhiclcpp_threading_notes_supporting_details.txt.

727 { throw fhicl::exception(cant_find, "vacuous key"); }
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
if ( iter  = =mapping_.end())
THREADING if ( iter!  = registry_.cend())
THREADING if ( stmt_  = nullptr)
indices ( ) const

Definition at line 713 of file fhiclcpp_threading_notes_supporting_details.txt.

713 : auto const& { return indices_; }
names_ vector instance ( )

Definition at line 1375 of file fhiclcpp_threading_notes_supporting_details.txt.

1375 : NameStackRegistry& { static NameStackRegistry registry; return registry; }
The instance_ ( ) const

Definition at line 536 of file fhiclcpp_threading_notes_supporting_details.txt.

547  :113 (verified by setting a breakpoint on the
549 
550 See the discussion of make_ParameterSet() below.
551 
552 This parameter set creation not only creates the ParameterSetRegistry, but
553 it also results in a complicated set of puts to the registry and uses of
554 ParameterSet::id(), neither of which is thread-safe.
555 
556 THREADING - Creation of parameter set from the intermediate table is not thread-safe.
557 
558 THREADING - Point of construction of the ParameterSetRegistry singleton instance.
559 
560 fhicl::ParameterSetRegistry::
561 ParameterSetRegistry()
562  : primaryDB_(openPrimaryDB())
563  , stmt_(nullptr)
564  , registry_()
565 {
566 }
it is part of the same thread as the issuing message Thus when it sets up that info is available for stuffing into the ErrorObj or use in deciding whether to react to a LogDebug The information provided is
the ParameterSet object passed in for the configuration of a destination should be the only source that can affect the behavior of that destination This is to eliminate the dependencies of configuring a destination from multiple mostly from the defaults It suppresses possible glitches about changing the configuration file somewhere outside of a destination segament might still affect the behavior of that destination In the previous configuration for a specific the value of a certain parameter
Making New Hardwired Defaults for the and how to create a specialized set of selectable by doing mute mode whateverNameYouChoose The MessageLogger has a set of hardwired for use when no MessageLogger configuration appears in the config file These match the contents of the MessageLogger cfi file Although these defaults are hardwired into it is recognized that changing circumstances and experience withthe framework will make necessary changes in the defaults the defaults are kept in a clean form in one for ease of modification Multiple sets of these defaults can be corresponding to multiple modes of operation For the production running(which is in a sense the"default"default mode) might be interested only in warnings and errors
THREADING problem if a is a ParameterSetID and value is a ParameterSet
The private default constructor with no arguments first calls openPrimaryDB() to initialize the primaryDB_ data member
The private default constructor with no arguments first calls then sets stmt_ to the and then default initializes the registry_ data member it would be better to initialize primaryDB_ to and then calls or on error it does not
the code is simple for extract with default of NO_VALUE_SET At this if a value has been set
parameter set interface
pass ownership into called function auto_ptr< T > sole copy transfer but not where shared ownership is inappropriate Inappropriate use can obfuscate correct ownership and contribute to fragile code weak_ptr< T > none shallow Use is subtle When one of these looks cet::exempt_ptr< T > is probably more appropriate scoped_ptr< T > sole not allowed object created locally in function
const double a
How the MessageService Sets Up the Module Name This document describes how the module and any suppression gets where the logger needs it
HOW TO RUN THIS CODE by
the ParameterSet object passed in for the configuration of a destination should be the only source that can affect the behavior of that destination This is to eliminate the dependencies of configuring a destination from multiple mostly from the defaults It suppresses possible glitches about changing the configuration file somewhere outside of a destination segament might still affect the behavior of that destination In the previous configuration for a specific the value of a certain e may come from following and have been suppressed It the configuring ParameterSet object for each destination will be required to carry a parameter list as complete as possible If a parameter still cannot be found in the ParameterSet the configuration code will go look for a hardwired default directly The model is a great simplicity comparing with the previous especially when looking for default values Another great advantage is most of the parameters now have very limited places that allows to appear Usually they can only appear at one certain level in a configuration file For in the old configuring model or in a default ParameterSet object inside of a or in a category or in a severity object This layout of multiple sources for a single parameter brings great confusion in both writing a configuration and in processing the configuration file Under the new the only allowed place for the parameter limit to appear is inside of a category which is inside of a destination object Other improvements simplify the meaning of a destination name In the old a destination name has multiple folds of meanings the e cout and cerr have the special meaning of logging messages to standard output or standard error the name also serves as the output filename if the destination is a file these names are also references to look up for detailed configurations in configuring the MessageFacility The multi purpose of the destination name might cause some unwanted behavior in either writing or parsing the configuration file To amend in the new model the destination name is now merely a name for a which might represent the literal purpose of this or just an id All other meanings of the destinations names now go into the destination ParameterSet as individual such as the type parameter and filename parameter Following is the deatiled rule for the new configuring Everything that is related with MessageFacility configuration must be wrapped in a single ParameterSet object with the name MessageFacility The MessageFacility ParameterSet object contains a series of top level parameters These parameters can be chosen from
thus any information present in the drop and needed by the server needs to be added into the ErrorObject that will cross the client server boundary MessageLogger h uses the MessageDrop in the LogDebug macro to learn the value of debugEnabled If debugEnabled is set to then the effect of LogDebug is to immediately return MessageSender cc gets the instance of MessageDrop to find out the moduleName and the runEvent It then places these into the ErrorObject it is forming to pass over to the server This is how the correct event for finds its way accurately into that other thread even if yet other threads are also issuing messages MessageLogger cc is responsible for filling the data fields of the MessageDrop with needed information MessageLogger cc is in the to avoid introducing a dependency on ModuleDescription into MessageLogger But it is not part of the MessageLoggerScribe thread
Making New Hardwired Defaults for the and how to create a specialized set of selectable by doing mute mode whateverNameYouChoose The MessageLogger has a set of hardwired for use when no MessageLogger configuration appears in the config file These match the contents of the MessageLogger cfi file Although these defaults are hardwired into it is recognized that changing circumstances and experience withthe framework will make necessary changes in the defaults the defaults are kept in a clean form in one for ease of modification Multiple sets of these defaults can be corresponding to multiple modes of operation For the production while occasional release validation jobs might want output concerning info messages as well In the example below
This add method has three it adds this message xid and id to the appropriate and it updates the dynamic information in counts The sequence is as the static apppropriate and timespan will be in the mapped CountAndLimit and there will be no need to recompute them If this xid is not yet in see if the category is in limits if the appropriate counts struct can be formed by using the precedence rules above to combine the limit and interval found in limits along with the severityLimits and severityIntervals arrays found in the ELlimitsTable Along the way the limits map for this category is filled in
Actions and Circumstances Relevant to Incomplete Log Problem The some of the LogInfo messages issued at the end involving branch information are failing to emerge This necessitates re running the job
names_ vector instance() static
Thread safety summary Safe binding_modifier h exception cc exception h fwd h ParameterArgumentTypes h parse_shims cc parse_shims h parse_shims_opts h print_mode h Protection cc Protection h tokens h type_traits_error_msgs h type_traits h validationException h(unused) Not Safe Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DatabaseSupport.cc DatabaseSupport.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h Indentation.h KeyAssembler.cc KeyAssembler.h KeysToIgnore.h(testing only) MaybeDisplayParent.cc MaybeDisplayParent.h Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterBase.h ParameterMetadata.h ParameterSet.cc ParameterSet.h ParameterSetID.cc ParameterSetID.h ParameterSetImplHelpers.h ParameterSetRegistry.cc ParameterSetRegistry.h ParameterSetWalker.h ParameterWalker.h Prettifier.cc Prettifier.h PrettifierAnnotated.cc PrettifierAnnotated.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h coding.cc coding.h encode_extended_value.cc encode_extended_value.h extended_value.cc extended_value.h intermediate_table.cc intermediate_table.h make_ParameterSet.cc make_ParameterSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h parse.cc parse.h printing_helpers.cc printing_helpers.h stdmap_shims.h strip_containing_names.cc strip_containing_names.h try_blocks.h-----Thread-safety summary by subsystem and component.Parameter File Parsing extended_value.cc extended_value.h Protection.cc Protection.h stdmap_shims.h intermediate_table.cc intermediate_table.h parse.cc parse.h tokens.h binding_modifier.h parse_shims.cc parse_shims.h parse_shims_opts.h encode_extended_value.cc encode_extended_value.h coding.cc coding.h Parameter Storage/Retrieval DatabaseSupport.cc DatabaseSupport.h ParameterSet.cc ParameterSet.h ParameterSetImplHelpers.h try_blocks.h KeyAssembler.cc KeyAssembler.h ParameterSetID.cc ParameterSetID.h ParameterSetRegistry.cc ParameterSetRegistry.h fwd.h make_ParameterSet.cc make_ParameterSet.h Parameter Validation Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h KeysToIgnore.h(testing only) Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterArgumentTypes.h ParameterBase.h ParameterMetadata.h ParameterWalker.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h strip_containing_names.cc strip_containing_names.h type_traits_error_msgs.h validationException.h(unused) Parameter Pretty-Printing Indentation.h MaybeDisplayParent.cc MaybeDisplayParent.h PrettifierAnnotated.cc PrettifierAnnotated.h Prettifier.cc Prettifier.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h printing_helpers.cc printing_helpers.h print_mode.h Parameter Utility Routines ParameterSetWalker.h exception.cc exception.h type_traits.h-----boost THREADING CALLED ONLY AT lib which is PROGRAM global destructor time ParameterSetRegistry()-THREADING-+ParameterSetRegistry(ParameterSet const &)=delete
services supplied by experiments are configured by parameters in the contained table named *user *The suggested type for those parameters is *table which is beyond the scope of this document Names in the *source * table
Definition: PARAMETERS.txt:112
make_ParameterSet(reinterpret_cast< char const * >(sqlite3_column_text(stmt_, 0)), pset)
id_ invalidate ( )
bool is_sequence ( par_type const  pt)
inline

Definition at line 1399 of file fhiclcpp_threading_notes_supporting_details.txt.

1399 { return pt == par_type::SEQ_VECTOR || pt == par_type::SEQ_ARRAY || pt == par_type::TUPLE; }
bool is_table ( par_type const  pt)
inline

Definition at line 1400 of file fhiclcpp_threading_notes_supporting_details.txt.

1400 { return pt == par_type::TABLE; }
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and TABLE
if* iter ( )
last ( ) const

Definition at line 704 of file fhiclcpp_threading_notes_supporting_details.txt.

704 : auto const& { return last_; }
make_ParameterSet ( reinterpret_cast< char const * >  sqlite3_column_text(stmt_, 0),
pset   
)
make_ParameterSet ( tbl  ,
ps   
)
make_ParameterSet ( raw_config  ,
main_pset   
)
make_ParameterSet ( psEntry.second.  pset_,
pset   
)
void make_ParameterSet ( string const str,
ParameterSet pset 
)
void make_ParameterSet ( string const filename,
cet::filepath_maker ,
ParameterSet pset 
)
try make_ParameterSet ( fname  ,
policy_ptr,
pset   
)
make_ParameterSet ( pstr  ,
pset   
)
name_ string indices_ vector SequenceKey string const name, vector const indices name_ name ( ) const

Definition at line 712 of file fhiclcpp_threading_notes_supporting_details.txt.

712 : auto const& { return name_; }
The private default constructor with no arguments first calls openPrimaryDB ( )
operator() ( ) const

Definition at line 1576 of file fhiclcpp_threading_notes_supporting_details.txt.

1576 : auto const& { return *value_; }
oss<< key<< "["<< i++<< "]";src_map[oss.str()]=xval.src_info;-THREADING-fill_src_info(xval, oss.str(), src_map);-THREADING-detail::try_insert(insert, key);...runs insert(), throws on error, uses key for error msg-----Analyzed by callgrind.make_ParameterSet(intermediate_table const &, ParameterSet &) ParameterSet::put< extended_value > ( string const key,
extended_value const value 
)

Definition at line 664 of file fhiclcpp_threading_notes_supporting_details.txt.

699  : vector<string>
700  - last_ : string
701 
702  + Keys(vector<string> const& keys, string const& last) : tables_{keys} , last_{last} {}
return T &value const auto keys
key_ string ParameterMetadata ( ) const
default
Thread safety summary Safe binding_modifier h exception cc exception h fwd h ParameterArgumentTypes h parse_shims cc parse_shims h parse_shims_opts h print_mode h Protection cc Protection h tokens h type_traits_error_msgs h type_traits h validationException h (unused) Not Safe Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DatabaseSupport.cc DatabaseSupport.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h Indentation.h KeyAssembler.cc KeyAssembler.h KeysToIgnore.h (testing only) MaybeDisplayParent.cc MaybeDisplayParent.h Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterBase.h ParameterMetadata.h ParameterSet.cc ParameterSet.h ParameterSetID.cc ParameterSetID.h ParameterSetImplHelpers.h ParameterSetRegistry.cc ParameterSetRegistry.h ParameterSetWalker.h ParameterWalker.h Prettifier.cc Prettifier.h PrettifierAnnotated.cc PrettifierAnnotated.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h coding.cc coding.h encode_extended_value.cc encode_extended_value.h extended_value.cc extended_value.h intermediate_table.cc intermediate_table.h make_ParameterSet.cc make_ParameterSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h parse.cc parse.h printing_helpers.cc printing_helpers.h stdmap_shims.h strip_containing_names.cc strip_containing_names.h try_blocks.h ----- Thread-safety summary by subsystem and component. Parameter File Parsing extended_value.cc extended_value.h Protection.cc Protection.h stdmap_shims.h intermediate_table.cc intermediate_table.h parse.cc parse.h tokens.h binding_modifier.h parse_shims.cc parse_shims.h parse_shims_opts.h encode_extended_value.cc encode_extended_value.h coding.cc coding.h Parameter Storage/Retrieval DatabaseSupport.cc DatabaseSupport.h ParameterSet.cc ParameterSet.h ParameterSetImplHelpers.h try_blocks.h KeyAssembler.cc KeyAssembler.h ParameterSetID.cc ParameterSetID.h ParameterSetRegistry.cc ParameterSetRegistry.h fwd.h make_ParameterSet.cc make_ParameterSet.h Parameter Validation Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h KeysToIgnore.h (testing only) Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterArgumentTypes.h ParameterBase.h ParameterMetadata.h ParameterWalker.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h strip_containing_names.cc strip_containing_names.h type_traits_error_msgs.h validationException.h (unused) Parameter Pretty-Printing Indentation.h MaybeDisplayParent.cc MaybeDisplayParent.h PrettifierAnnotated.cc PrettifierAnnotated.h Prettifier.cc Prettifier.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h printing_helpers.cc printing_helpers.h print_mode.h Parameter Utility Routines ParameterSetWalker.h exception.cc exception.h type_traits.h ----- boost THREADING CALLED ONLY AT lib which is PROGRAM global destructor time ParameterSetRegistry ( ) const
delete
ParameterSetRegistry ( ParameterSet &&  )
delete
parse_document ( string  ,
tbl   
)
parse_document ( str  ,
tbl   
)
parse_document ( filename  ,
maker  ,
tbl   
)
keys pop_back ( )
string const pstr ( ss.  str())
R ( (\]\[|\[|\])  )
The private default constructor with no arguments first calls then sets stmt_ to the and then default initializes the registry_ data member it would be better to initialize primaryDB_ to and then calls sqlite3_exec ( )
THREADING sqlite3_reset ( stmt_  )
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and tableids ( @id::+  [0-9A-Fa-f])
TableMemberRegistry ( ) const
defaultdelete
tables ( ) const

Definition at line 703 of file fhiclcpp_threading_notes_supporting_details.txt.

703 : auto const& { return tables_; }
The private default constructor with no arguments first calls then sets stmt_ to the and then default initializes the registry_ data member it would be better to initialize primaryDB_ to and then calls or on error it does there will never be a partially created table The throwOnSQLiteFailure ( )
throws a fhicl::exception. Otherwise it calls sqlite3_errcode to retrieve the pending error code from sqlite and then uses sqlite3_errstr to translate the code to a message. Then it calls sqlite3_errmsg passing it the local database pointer to retrieve further information. Then it throws a fhicl::exception. THREADING - ParameterSetRegistry construction is not thread-safe. The uses of sqlite3 interfaces in the ParameterSetRegistry private default constructor with no arguments form a transaction that must not be interleaved with another attempted construction. The thread-safety of sqlite3 is not clear, callgrind traces show that pthread mutexes are being used, so there is some attempt being made, must investigate interactions with tbb. THREADING - sqlite3 thread-safety uses pthread, is it compatible with tbb? Construction of the ParameterSetRegistry should not be interleaved with any other uses of the sqlite3 interfaces to manipulate the parameter set database. And possibly should not be mixed with any other used of sqlite3, this needs further investigation. Careful thought must also be given to the interaction of exception handling with the thread tasking system in use. THREADING - Must know how throwing an exception in a thread safely shuts down the other threads. THREADING - Nearly all ParameterSetRegistry interfaces use instance_() and so may result in construction of the singleton instance at a time when it is not safe. ----- Detailed source-based analysis of ParameterSet::put(string const&,
extended_value const&) template<> void ParameterSet:: put(string const& key,
extended_value const& value) auto insert = [this,
&key,
&value]() insert_(key,
boost::any(detail::encode(value
)
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and TABLEID enum Protection PROTECT_IGNORE PROTECT_ERROR unsigned char NONE to_string ( Protection  p)
strong

Definition at line 1249 of file fhiclcpp_threading_notes_supporting_details.txt.

1249  : string
1250 
1251 class extended_value
1252 
1253  + atom_t : string
1254  + complex_t : pair<string, string>
1255  + sequence_t : vector<extended_value>
1256  + table_t : shims::map<string, extended_value>
1257 
1258  + in_prolog : bool
1259  + tag : value_tag
1260  + value : boost::any - THREADING - sequence_t, table_t usage
1261  + src_info : string // holds filename:linenum
1262  + protection : Protection
1263 
1264  + extended_value() : in_prolog(false) , tag(UNKNOWN) , value() , src_info() , protection(Protection::NONE) {}
intermediate_table::complex_t complex_t
std::string string
Definition: nybbler.cc:12
void usage(Catch::Session &session, std::string processName)
Definition: catch_main.cc:14
Protection
Definition: Protection.h:7
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
Definition: DumpUtils.h:265
extended_value(bool in_prolog, value_tag tag, boost::any value, Protection protection, string const &src={})
fhicl::extended_value::sequence_t sequence_t
intermediate_table::atom_t atom_t

Variable Documentation

__pad0__
mapping_ __pad10__
and __pad11__
Or __pad12__
And __pad13__
tables_ __pad14__
value_ __pad15__
__pad1__
__pad2__
__pad3__
if (!detail::find_an_any(skey.indices().cbegin(), skey.indices().cend(), a)) throw exception(error __pad4__
THREADING __pad5__
THREADING __pad6__
THREADING __pad7__
__pad8__
default __pad9__
o encode called by ParameterSet::put () Uses And
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and BOOL
THREADING break
fhiclcpp fhiclcpp detail encode_extended_value cc
delete
if (!detail::find_an_any(skey.indices().cbegin(), skey.indices().cend(), a)) throw exception(error cit_size_t const cend
key_ string Comment const& comment = Comment("")
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and COMPLEX
mapping_ boost::any THREADING all three data members must be interlocked against writers string THREADING all three data members must be interlocked against writers bool annotate detail::print_mode pm T &value const
copies from on disk db into in memory db
return default_config
Thread safety summary Safe binding_modifier h exception cc exception h fwd h ParameterArgumentTypes h parse_shims cc parse_shims h parse_shims_opts h print_mode h Protection cc Protection h tokens h type_traits_error_msgs h type_traits h validationException h (unused) Not Safe Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DatabaseSupport.cc DatabaseSupport.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h Indentation.h KeyAssembler.cc KeyAssembler.h KeysToIgnore.h (testing only) MaybeDisplayParent.cc MaybeDisplayParent.h Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterBase.h ParameterMetadata.h ParameterSet.cc ParameterSet.h ParameterSetID.cc ParameterSetID.h ParameterSetImplHelpers.h ParameterSetRegistry.cc ParameterSetRegistry.h ParameterSetWalker.h ParameterWalker.h Prettifier.cc Prettifier.h PrettifierAnnotated.cc PrettifierAnnotated.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h coding.cc coding.h encode_extended_value.cc encode_extended_value.h extended_value.cc extended_value.h intermediate_table.cc intermediate_table.h make_ParameterSet.cc make_ParameterSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h parse.cc parse.h printing_helpers.cc printing_helpers.h stdmap_shims.h strip_containing_names.cc strip_containing_names.h try_blocks.h ----- Thread-safety summary by subsystem and component. Parameter File Parsing extended_value.cc extended_value.h Protection.cc Protection.h stdmap_shims.h intermediate_table.cc intermediate_table.h parse.cc parse.h tokens.h binding_modifier.h parse_shims.cc parse_shims.h parse_shims_opts.h encode_extended_value.cc encode_extended_value.h coding.cc coding.h Parameter Storage/Retrieval DatabaseSupport.cc DatabaseSupport.h ParameterSet.cc ParameterSet.h ParameterSetImplHelpers.h try_blocks.h KeyAssembler.cc KeyAssembler.h ParameterSetID.cc ParameterSetID.h ParameterSetRegistry.cc ParameterSetRegistry.h fwd.h make_ParameterSet.cc make_ParameterSet.h Parameter Validation Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h KeysToIgnore.h (testing only) Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterArgumentTypes.h ParameterBase.h ParameterMetadata.h ParameterWalker.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h strip_containing_names.cc strip_containing_names.h type_traits_error_msgs.h validationException.h (unused) Parameter Pretty-Printing Indentation.h MaybeDisplayParent.cc MaybeDisplayParent.h PrettifierAnnotated.cc PrettifierAnnotated.h Prettifier.cc Prettifier.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h printing_helpers.cc printing_helpers.h print_mode.h Parameter Utility Routines ParameterSetWalker.h exception.cc exception.h type_traits.h ----- boost THREADING CALLED ONLY AT lib which is PROGRAM EXIT
iterate over intermediate table use ParameterSet::put (key, value) ParameterSetRegistry o root input files
The private default constructor with no arguments first calls then sets stmt_ to the and then default initializes the registry_ data member it would be better to initialize primaryDB_ to and FIXME
return get_if_present(key, result)?result
mapping_ boost::any THREADING all three data members must be interlocked against writers string THREADING all three data members must be interlocked against writers bool annotate detail::print_mode pm T& value T T convert (Via const&)) const for auto& handler
THREADING problem if a is a ParameterSetID and value is a ParameterSet& result ParameterSetID id = any_cast<ParameterSetID>(a)
THREADING SELECT PSetBlob FROM ParameterSets WHERE ID = ?
mapping_ boost::any THREADING all three data members must be interlocked against writers string THREADING all three data members must be interlocked against writers id_
THREADING auto idString = id.to_string()
vector<size_t> indices
THREADING return iter = mapping_.find(skey.name())
return T& value const auto keys = detail::get_names(key)
return Keys {keys, last}
string const last = keys.back()
ParameterSet main_pset
maker_
auto const name = tokens.front()
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and NIL
The private default constructor with no arguments first calls then sets stmt_ to the and then default initializes the registry_ data member it would be better to initialize primaryDB_ to and then calls or on error it does not
nullptr
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and NUMBER
p {this}
THREADING problem if a is a ParameterSetID and value is a ParameterSet
This is the output of a fcl file parse
key_ string Comment const par_style const parStyle = par_style::NTYPES
key_ string Comment const par_style const par_type const parType
ParameterSet ps = *p
o messagefacility ParameterSet const &default_config ParameterSet pset
raw_config
return registry
THREADING result = ParameterSetRegistry::get(id)
if (iter == cend()) throw exception(error THREADING return iter second
auto const seq = boost::any_cast<ps_sequence_t>(a)
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and SEQUENCE
return SequenceKey {name, indices}
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold sequences
T& value const try auto skey = detail::get_sequence_indices(key)
THREADING switch (result) ... ... ... ... ... ... case SQLITE_DONE case SQLITE_ROW
mapping_ boost::any THREADING all three data members must be interlocked against writers srcMapping_
& stmt_
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and STRING
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold and TABLE
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold tables
intermediate_table tbl
art art Framework Principal Run temp
THREADING return true
Thread safety summary Safe binding_modifier h exception cc exception h fwd h ParameterArgumentTypes h parse_shims cc parse_shims h parse_shims_opts h print_mode h Protection cc Protection h tokens h type_traits_error_msgs h type_traits h validationException h (unused) Not Safe Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DatabaseSupport.cc DatabaseSupport.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h Indentation.h KeyAssembler.cc KeyAssembler.h KeysToIgnore.h (testing only) MaybeDisplayParent.cc MaybeDisplayParent.h Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterBase.h ParameterMetadata.h ParameterSet.cc ParameterSet.h ParameterSetID.cc ParameterSetID.h ParameterSetImplHelpers.h ParameterSetRegistry.cc ParameterSetRegistry.h ParameterSetWalker.h ParameterWalker.h Prettifier.cc Prettifier.h PrettifierAnnotated.cc PrettifierAnnotated.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h coding.cc coding.h encode_extended_value.cc encode_extended_value.h extended_value.cc extended_value.h intermediate_table.cc intermediate_table.h make_ParameterSet.cc make_ParameterSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h parse.cc parse.h printing_helpers.cc printing_helpers.h stdmap_shims.h strip_containing_names.cc strip_containing_names.h try_blocks.h ----- Thread-safety summary by subsystem and component. Parameter File Parsing extended_value.cc extended_value.h Protection.cc Protection.h stdmap_shims.h intermediate_table.cc intermediate_table.h parse.cc parse.h tokens.h binding_modifier.h parse_shims.cc parse_shims.h parse_shims_opts.h encode_extended_value.cc encode_extended_value.h coding.cc coding.h Parameter Storage/Retrieval DatabaseSupport.cc DatabaseSupport.h ParameterSet.cc ParameterSet.h ParameterSetImplHelpers.h try_blocks.h KeyAssembler.cc KeyAssembler.h ParameterSetID.cc ParameterSetID.h ParameterSetRegistry.cc ParameterSetRegistry.h fwd.h make_ParameterSet.cc make_ParameterSet.h Parameter Validation Atom.h Atom.icc AtomBase.h Comment.h ConfigPredicate.h DelegateBase.h DelegatedParameter.cc DelegatedParameter.h KeysToIgnore.h (testing only) Name.cc Name.h NameStackRegistry.cc NameStackRegistry.h OptionalAtom.h OptionalAtom.icc OptionalDelegatedParameter.cc OptionalDelegatedParameter.h OptionalSequence.h OptionalSequence.icc OptionalTable.h OptionalTable.icc OptionalTuple.h OptionalTupleAs.h ParameterArgumentTypes.h ParameterBase.h ParameterMetadata.h ParameterWalker.h PrintAllowedConfiguration.cc PrintAllowedConfiguration.h SeqVectorBase.h Sequence.h Sequence.icc SequenceBase.h Table.h Table.icc TableBase.h TableFragment.h TableMemberRegistry.h Tuple.h TupleAs.h ValidateThenSet.cc ValidateThenSet.h optional_parameter_message.h ostream_helpers.cc ostream_helpers.h strip_containing_names.cc strip_containing_names.h type_traits_error_msgs.h validationException.h (unused) Parameter Pretty-Printing Indentation.h MaybeDisplayParent.cc MaybeDisplayParent.h PrettifierAnnotated.cc PrettifierAnnotated.h Prettifier.cc Prettifier.h PrettifierPrefixAnnotated.cc PrettifierPrefixAnnotated.h printing_helpers.cc printing_helpers.h print_mode.h Parameter Utility Routines ParameterSetWalker.h exception.cc exception.h type_traits.h ----- boost THREADING CALLED ONLY AT lib unload
o messagefacility Uses
mapping_ boost::any THREADING all three data members must be interlocked against writers string THREADING all three data members must be interlocked against writers bool annotate detail::print_mode pm T &value T & value
This is the output of a fcl file normally held as a data member of an intermediate_table The structure is recursive and may hold values