Skip to content

WIP: Reentrant DataHandles

/!\ THIS MR IS BASED ON !798 (closed) /!\

This is different take on !462 (merged). Unlike its predecessor, it does not touch the base DataHandle/DataHandleHolder layer (that is the job of its !798 (closed) base MR, which itself remains modest in its aspirations), and should therefore have negligible impact on ATLAS.

On the user-facing side, this MR is significantly more ambitious than !462 (merged) in several ways:

  • TLS-free access to the whiteboard from the EventContext (unfortunately type-erased, since after a couple of hours in front of the drawing board, @graven @clemenci and I reached agreement that an efficient abstract whiteboard interface is not feasible in standard C++)
  • Unsynchronized access to the whiteboard in scenarios without intra-event parallelism
  • All main features of DataObjectHandle are supported, including ranges and alternate paths (the only things missing AFAIK are a handle for type-erased container size access and another to check for the presence or absence of data)
  • Migration from DataObjectHandle is reasonably easy (main hassle is that configuration and test reference files must be tweaked because the configurable is now a string instead of a dedicated class that pervades the whole Property machinery)
  • In many cases, the new handles are simpler to use than the old ones (e.g. the property version is movable)
  • As a way to prove ease of migration and assemble a solid test suite, this MR migrates every single use of DataObjectHandle in Gaudi to the new DataHandles. That was done in a day, debugging of implementation included.

As this last part comes with a large diff, and the rebase on !798 (closed) pollutes the diff as well, I recommend checking this MR using the commit-based view, which was nicely squashed and should therefore be very readable.

Edited by Marco Clemencic

Merge request reports