ParameterSet bloat fix.


16 issues   (16 closed — 0 open)

Art Suite Release Notes 1.11.00 (2014/08/25).

External package changes.

[ Version changes only ].

  • GCC 4.9.1 (new qualifiers e6 and gcc491).
  • CMake 3.0.1 (some new CMake policy warnings -- see build system changes for details).
  • Boost 1.56.0.
  • Python 2.7.8.
  • SQLite
  • Intel TBB 4.2.5.
  • ROOT 5.34.20.
    *BREAKING CHANGE* When calculating object checkums (which ROOT does in order to check validity of ClassVersion) of e.g. data products, any base classes are now taken into account. This means that, order for the checkClassVersion step of builds to work correctly, the dictionary library containing the dictionary data for a subclass must be linked against the dictionary library containing the dictionary data for the bae class, if they are in different libraries. For those using the art_make() CMake function, the DICT_LIBRARIES option can help here. For explicit use of the art_dictionary() CMake function, the option is named DICTIONARY_LIBRARIES.
  • xrootd 4.0.3.
  • cstxsd 4.0.0 (build simplified due to newer version: special builds of boost and xerces_c are no longer required.
  • MySQL client 5.5.39.
  • PostGresQL 9.1.14.
  • GDB 7.8. This product was separated from the GCC distribution when the build of GDB was simplified.

C++14 support.

The e6 qualifier has been introduced. In addition to implying the use of GCC 4.9.1, it also implies that any C++ code must be compiled with the -std=c++1y option (as opposed to the -std=c++11 option required for e1 - e5). Linking against an e6-qualified UPS product (say) therefore requires that you also compile your code with this option. This standard is additive: code which compiled under -std=c++11 should not fail to compile merely because the standard against which it is compiled has changed. However, we have evidence that GCC 4.9.1 is able to spot and flag certain problems that were missed by e.g. 4.8.2, such as some instances of narrowing conversions. Incidental header injection has been reduced, meaning that if you were accidentally relying on a nested header inclusion (a C++ library header including <iostream>, for example) successful compilation will require the explicit inclusion of the required header.

Currently, e5 and e6 versions of the art suite and externals are provided; in the near future we will be taking advantage of C++14 features within art, requiring the use of e6 and -std=c++1y going forward.

Some interesting features of C++14:

For a reasonable treatment of these and other features, see Wikipedia's C++14 entry, but please note that variable templates are not supported by GCC 4.9.1.

Build system changes (cetbuildtools, etc.).

  • With the advent of cetbuildtools 4.0.0, the structure of the product_deps file has been enhanced, and there is a corresponding change to the setup_for_development file. You should not change one without changing the other, but since 4.0.1 either the old form or the new one is accepted. The old form is deprecated however, and support will be removed in the future. There is a script, migrate-package, that will upgrade the product_deps and setup_for_development files in order to work best with newer cetbuildtools. Usage:
    setup cetbuildtools v4_01_04 # (say)
    migrate-package <package-top-dir>
  • One is now able to specify different versions of a package for different qualifiers e.g. the qualifier_list section could have s4 (see rows built against art 1.11.03 and s3 rows built against art 1.10.00b in the same version of the packge. This may be done in the product_list section, viz:
    art     v1_11_03        s4
    art     v1_10_00b       s3
    This is transitive (ie dependencies such as artdaq_core may do the job for you), so you should avoid listing products in the product_list and qualifier_list sections if they are brought in by dependencies. To assist in trimming down the qualifier_list table, your attention is drawn to the rectangle-kill (C-x r k) function of emacs (wiki, emacs manual), and the equivalent visual-select function (C-v d) of vim (wiki, vim manual).
  • *BREAKING CHANGE* CMake 3.0.1 has some new policy requirements, and these may lead to new warnings. Using cetbuildtools 4.0.0 or newer to compile a package using art_make() or art_dictionary from an art prior to 1.11.02 will result in (harmless) complaints from CMake, as nonexistent dependencies are now detected and complained about.
  • install_fhicl(), install_gdml() and cet_test(... DATAFILES ...) all use the new cet_copy() function instead of CONFIGURE() or FILE(COPY ...). This means that changes to installed files will not result in a forced re-run of CMake the next time make is invoked.
  • cetbuildtools now determines which -std= flag to use base on the qualifier. If the user specifies an incompatible -std= flag, this is an error at the CMake stage. Any clauses you may have adding (say) -std=c++11 should be removed.

Art suite highlghts.

As usual, one should review the release notes pages for the products comprising the art suite by following the links below. In particular though, three new keywords (@erase, @sequence and @table) have been added to the FHiCL language, and the ParameterSetRegistry has been improved in order to improve the reading and writing performance for jobs with large numbers of parameter sets. Please see the linked release notes for these packages below for further details.

Art 1.11.00.

New features:

  • Feature #6803: Doesn't support second time. Only nanosec time.
    Behavior Change The EmptyEvent module allowed setting of the timestamp via parameters, but applied semantics that were inherited from CMS. In order to provide a timestamp for an event, one is expected now to provide a plugin inheriting from source:art/Framework/Core/EmptyEventTimestampPlugin.h. To do this, one must build a library whose name ends in, and add the parameter:
    timestampPlugin: { plugin_type: PluginClassName }
    to the configuration for your EmptyEvent source. The timestampPlugin parameter set will be passed to your subclass' constructor, so you can add your own parameters to this set and configure the plugin as you might configure, say, an analyzer.
  • Feature #5217: File opening slow due to parsing of saved configuration.
    See notes for Bug #5805, below.
  • Feature #3690: MAC build of ART and ART externals.
    This is finally officially achieved with the splitting of artdaq into artdaq_core and artdaq to reduce the dependencies, allowing the NOvA DDT to be built on Mac OS X.

Bug fixes:

  • Bug #2976: mu2e -S filelist runs on more than the filelist.
    Behavior Change:
    1. An source list file (empty or otherwise) will always override specification in FHiCL.
    2. A source file list specification is incompatible with command-line specification of file names (either with -s, --source or as non-option arguments).
  • Bug #5805: Attacking parameter set bloat.
    The size taken up in a file by parameter sets has been reduced, and the performance improved generally, in the following ways:
    • The persistent form of a parameter set in the on-file DB no longer has unconditional expansion of nested parameter sets; instead, they are represented by @id::<hash> in the event that this representation is smaller than the fully-expanded representation.
    • Parameter sets in an input file are no longer parsed unconditionally; instead, they are read into an in-memory backing DB and only turned into ParameterSet when they are requested specifically.
    • Upon writing an output file, parameter sets are transferred from the backing DB to the on-file DB without being parsed.
    • Parsed parameter sets are stored in-memory in a registry using std::unordered_map, leading to approximately constant-time lookup instead of logarithmic.
  • Bug #6527: Calling removeCachedProduct() on a new Handle segfaults.
  • Bug #6643: large memory cost for simple art job in nova offline.
    Subrun- and run-level data products are now loaded on-demand, allowing removeCachedProduct() to have the intended effect of reducing memory footprint.
  • Bug #6652: problem with root 5.34.19.
    There are some problems with ROOT and recent versions of xrootd. The version of xrootd has been rolled back to 3.3.4
  • Bug #6801: Possible failure of config_dumper to dump services configuration.
    This was due to the fact that many service parameter sets do not have service_type defined in their persistent version, as this was an automatic parameter added at service construction time. This parameter is now generated as part of the initial configuration post-processing, meaning that the parameter is now saved with the rest of the parameter set.
  • Bug #6823: Metadata field "parents" is not compatable with SAM.
    Per-stream metadata items produced by user implementations of FileCatalogMetadataPlugin now override matching items generated by the output module itself.

Known issues:

  • Accessing files in an art executable through xrootd causes a segfault at application tear-down due to an interaction between ROOT and xrootd 4.0.3.

messagefacility 1.11.13 (new version).

fhicl-cpp 3.01.00 (new version).

cetlib 1.07.01 (new version).

cpp0x 1.04.07 (new version).

Time tracking
Estimated time 234.00 hours
Spent time 302.25 hours
Issues by




Necessary Maintenance