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.

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