Skip to content

Commit 665e4ff

Browse files
committed
Remove __openPMD_internal/useSteps bug
1 parent 31e44a6 commit 665e4ff

File tree

4 files changed

+36
-18
lines changed

4 files changed

+36
-18
lines changed

.github/ci/sanitizer/clang/Leak.supp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@ leak:adios_inq_var
1515
# ADIOS2
1616
leak:adios2::core::engine::SstReader::*
1717
leak:adios2::core::engine::SstWriter::*
18+
leak:adios2::format::BP3Serializer::AggregateCollectiveMetadataIndices
19+
leak:adios2::core::engine::BP5Writer::MarshalAttributes

include/openPMD/IO/ADIOS/ADIOS2IOHandler.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1084,9 +1084,15 @@ namespace detail
10841084
* @brief Begin or end an ADIOS step.
10851085
*
10861086
* @param mode Whether to begin or end a step.
1087+
* @param calledExplicitly True if called due to a public API call.
1088+
* False if called from requireActiveStep.
1089+
* Some engines (BP5) require that every interaction happens within
1090+
* an active step, meaning that we need to call advance()
1091+
* implicitly at times. When doing that, do not tag the dataset
1092+
* with __openPMD_internal/useSteps (yet).
10871093
* @return AdvanceStatus
10881094
*/
1089-
AdvanceStatus advance(AdvanceMode mode);
1095+
AdvanceStatus advance(AdvanceMode mode, bool calledExplicitly);
10901096

10911097
/*
10921098
* Delete all buffered actions without running them.

include/openPMD/config.hpp.in

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,23 @@
2121
#pragma once
2222

2323
#ifndef openPMD_HAS_CXX17
24-
# cmakedefine01 openPMD_HAS_CXX17
24+
#cmakedefine01 openPMD_HAS_CXX17
2525
#endif
2626

2727
#ifndef openPMD_HAVE_MPI
28-
# cmakedefine01 openPMD_HAVE_MPI
28+
#cmakedefine01 openPMD_HAVE_MPI
2929
#endif
3030

3131
#define openPMD_HAVE_JSON 1
3232

3333
#ifndef openPMD_HAVE_HDF5
34-
# cmakedefine01 openPMD_HAVE_HDF5
34+
#cmakedefine01 openPMD_HAVE_HDF5
3535
#endif
3636

3737
#ifndef openPMD_HAVE_ADIOS1
38-
# cmakedefine01 openPMD_HAVE_ADIOS1
38+
#cmakedefine01 openPMD_HAVE_ADIOS1
3939
#endif
4040

4141
#ifndef openPMD_HAVE_ADIOS2
42-
# cmakedefine01 openPMD_HAVE_ADIOS2
42+
#cmakedefine01 openPMD_HAVE_ADIOS2
4343
#endif

src/IO/ADIOS/ADIOS2IOHandler.cpp

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1062,7 +1062,8 @@ void ADIOS2IOHandlerImpl::advance(
10621062
{
10631063
auto file = m_files[writable];
10641064
auto &ba = getFileData(file, IfFileNotOpen::ThrowError);
1065-
*parameters.status = ba.advance(parameters.mode);
1065+
*parameters.status =
1066+
ba.advance(parameters.mode, /* calledExplicitly = */ true);
10661067
}
10671068

10681069
void ADIOS2IOHandlerImpl::closePath(
@@ -2580,7 +2581,8 @@ namespace detail
25802581
*/
25812582
if (streamStatus == StreamStatus::OutsideOfStep)
25822583
{
2583-
switch (advance(AdvanceMode::BEGINSTEP))
2584+
switch (
2585+
advance(AdvanceMode::BEGINSTEP, /* calledExplicitly = */ false))
25842586
{
25852587
case AdvanceStatus::OVER:
25862588
throw std::runtime_error(
@@ -2741,7 +2743,8 @@ namespace detail
27412743
/* flushUnconditionally = */ false);
27422744
}
27432745

2744-
AdvanceStatus BufferedActions::advance(AdvanceMode mode)
2746+
AdvanceStatus
2747+
BufferedActions::advance(AdvanceMode mode, bool calledExplicitly)
27452748
{
27462749
if (streamStatus == StreamStatus::Undecided)
27472750
{
@@ -2757,8 +2760,12 @@ namespace detail
27572760
return AdvanceStatus::OK;
27582761
}
27592762

2760-
m_IO.DefineAttribute<bool_representation>(
2761-
ADIOS2Defaults::str_usesstepsAttribute, 1);
2763+
if (calledExplicitly)
2764+
{
2765+
m_IO.DefineAttribute<bool_representation>(
2766+
ADIOS2Defaults::str_usesstepsAttribute, 1);
2767+
}
2768+
27622769
switch (mode)
27632770
{
27642771
case AdvanceMode::ENDSTEP: {
@@ -2795,13 +2802,16 @@ namespace detail
27952802

27962803
if (streamStatus != StreamStatus::DuringStep)
27972804
{
2798-
flush(
2799-
FlushLevel::UserFlush,
2800-
[&adiosStatus](BufferedActions &, adios2::Engine &engine) {
2801-
adiosStatus = engine.BeginStep();
2802-
},
2803-
/* writeAttributes = */ false,
2804-
/* flushUnconditionally = */ true);
2805+
adiosStatus = getEngine().BeginStep();
2806+
// if (adiosStatus != adios2::StepStatus::OK)
2807+
// {
2808+
// throw std::runtime_error(
2809+
// "[ADIOS2] Failure when trying to open a step.");
2810+
// }
2811+
// else
2812+
// {
2813+
// streamStatus = StreamStatus::DuringStep;
2814+
// }
28052815
if (adiosStatus == adios2::StepStatus::OK &&
28062816
m_mode == adios2::Mode::Read &&
28072817
attributeLayout() == AttributeLayout::ByAdiosVariables)

0 commit comments

Comments
 (0)