Skip to content

More robust error handling and improved ergonomics in case of unreadable data #847

@tmadlener

Description

@tmadlener

Currently, when podio doesn't know how to instantiate a collection buffer for a collection on file, we just default construct a CollectionReadBuffer, which will not have a properly initialized create function, and will ultimately result in a bad_function_call, e.g.

terminate called after throwing an instance of 'std::bad_function_call'
  what():  bad_function_call
/<prefix>/bin/podio-dump: line 37: 2647243 Aborted                 (core dumped) "${THIS_DIR}"/podio-dump-tool "${ALL_ARGS[@]}"

The implementations are (among other places)

podio/src/ROOTReader.cc

Lines 149 to 153 in 6bd80b0

const auto& bufferFactory = podio::CollectionBufferFactory::instance();
auto maybeBuffers = bufferFactory.createBuffers(collType, schemaVersion, isSubsetColl);
// TODO: Error handling of empty optional
auto collBuffers = maybeBuffers.value_or(podio::CollectionReadBuffers{});

podio/src/RNTupleReader.cc

Lines 180 to 182 in 6bd80b0

const auto& bufferFactory = podio::CollectionBufferFactory::instance();
const auto maybeBuffers = bufferFactory.createBuffers(collType, coll.schemaVersion, coll.isSubset);
const auto collBuffers = maybeBuffers.value_or(podio::CollectionReadBuffers{});

const auto& bufferFactory = podio::CollectionBufferFactory::instance();
// TODO:
// - Error handling of empty optional
auto maybeBuffers = bufferFactory.createBuffers("{{ class.full_type }}Collection", sio::version::major_version(version), m_subsetColl);
m_buffers = maybeBuffers.value_or(podio::CollectionReadBuffers{});

The least we should do is to give a more informative error message here.

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions