Skip to content

StoreGate: Decoration handle updates

When we add a decoration with a decoration handle, we make an alias to the container under the name CONT.DECOR. These aliases are used to express decoration dependencies to the scheduler, and are persistified by AthenaPOOL.

The decoration handles assumed that these alias should be there, and in some cases wouldn't work as expected if they were absent. For example, ReadDecorHandle looked up the container via the alias name, while WriteDecorHandle::isAvailable also looked up the container via the alias name.

However, the aliases may be missing in some cases. For example, for some EventInfo variables set by the event loop. And aliases may not by available if data are being read by something other than AthenaPOOL.

The changes here update the decoration handle classes to allow them to work properly even if the alias is not present. Other than that, the main visible change in behavior is that Read/WriteDecorHandle::key() will now return the key of the container rather than the key of the alias. The alias name may now be retrieved by decorKey(). The behavior of the *DecorHandleKey classes does not change in this regard, and there's probably nothing relying on key() of *DecorHandle.

In a bit more detail:

ReadDecorHandleKey gets a contHandleKey(), which returns a ReadHandleKey for the container. This is similar to what WriteDecorHandleKey has already been doing, except that the contHandleKey does not get declared to the scheduler.

ReadDecorHandle now passes contHandleKey to the base class rather than the ReadDecorHandleKey, and adds decorKey(). We can also clean up isPresent().

WriteDecorHandle no longer has m_contHandle, instead adding decorKey().

cf ATEAM-671.

Edited by Scott Snyder

Merge request reports