Skip to content

Commit 1ae7401

Browse files
committed
Use own flag for the warning
Previously implementation did not work: ornladios/ADIOS2#4466
1 parent 56b453f commit 1ae7401

3 files changed

Lines changed: 26 additions & 24 deletions

File tree

include/openPMD/IO/ADIOS/ADIOS2Auxiliary.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ namespace adios_defaults
9797
constexpr const_str str_usesteps = "usesteps";
9898
constexpr const_str str_flushtarget = "preferred_flush_target";
9999
constexpr const_str str_usesstepsAttribute = "__openPMD_internal/useSteps";
100+
constexpr const_str str_useModifiableAttributes =
101+
"__openPMD_internal/useModifiableAttributes";
100102
constexpr const_str str_adios2Schema =
101103
"__openPMD_internal/openPMD2_adios2_schema";
102104
constexpr const_str str_isBoolean = "__is_boolean__";

src/IO/ADIOS/ADIOS2File.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "openPMD/IO/ADIOS/ADIOS2File.hpp"
2323
#include "openPMD/Error.hpp"
24+
#include "openPMD/IO/ADIOS/ADIOS2Auxiliary.hpp"
2425
#include "openPMD/IO/ADIOS/ADIOS2IOHandler.hpp"
2526
#include "openPMD/IO/AbstractIOHandler.hpp"
2627
#include "openPMD/IterationEncoding.hpp"
@@ -500,6 +501,12 @@ void ADIOS2File::configure_IO()
500501
? ADIOS2IOHandlerImpl::ModifiableAttributes::Yes
501502
: ADIOS2IOHandlerImpl::ModifiableAttributes::No;
502503
}
504+
m_IO.DefineAttribute<bool_representation>(
505+
adios_defaults::str_useModifiableAttributes,
506+
m_impl->m_modifiableAttributes ==
507+
ADIOS2IOHandlerImpl::ModifiableAttributes::No
508+
? 0
509+
: 1);
503510
#else
504511
if (!m_impl->m_useGroupTable.has_value())
505512
{

src/IO/ADIOS/ADIOS2IOHandler.cpp

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,37 +1541,30 @@ namespace
15411541
}
15421542
static constexpr char const *errorMsg = "DistributeToAllRanks";
15431543
};
1544+
#endif
15441545

1545-
void warn_ignored_modifiable_attributes(
1546-
adios2::IO &IO, std::string const &exempt_this_from_warnings)
1546+
void warn_ignored_modifiable_attributes(adios2::IO &IO)
15471547
{
1548-
auto all_attributes = IO.AvailableAttributes();
1549-
std::deque<std::string> modifiable_attributes;
1550-
for (auto const &[identifier, params] : all_attributes)
1551-
{
1552-
if (params.at("Modifiable") == "1")
1553-
{
1554-
modifiable_attributes.emplace_back(identifier);
1555-
}
1556-
}
1557-
if (modifiable_attributes.size() > 1 ||
1558-
(modifiable_attributes.size() == 1 &&
1559-
*modifiable_attributes.begin() != exempt_this_from_warnings))
1560-
{
1561-
std::cerr << &R"(
1562-
Warning: Random-access for variable-encoding in ADIOS2 is currently
1548+
auto modifiable_flag = IO.InquireAttribute<detail::bool_representation>(
1549+
adios_defaults::str_useModifiableAttributes);
1550+
auto print_warning = [](std::string const &note) {
1551+
std::cerr << "Warning: " << note << R"(
1552+
Random-access for variable-encoding in ADIOS2 is currently
15631553
experimental. Support for modifiable attributes is currently not implemented
15641554
yet, meaning that attributes such as /data/time will show useless values.
15651555
Use Access::READ_LINEAR to retrieve those values if needed.
15661556
The following modifiable attributes have been found:
1567-
)"[1];
1568-
for (auto const &identifier : modifiable_attributes)
1569-
{
1570-
std::cerr << '\t' << identifier << '\n';
1571-
}
1557+
)";
1558+
};
1559+
if (!modifiable_flag)
1560+
{
1561+
print_warning("File might be using modifiable attributes.");
1562+
}
1563+
else if (modifiable_flag.Data().at(0) != 0)
1564+
{
1565+
print_warning("File uses modifiable attributes.");
15721566
}
15731567
}
1574-
#endif
15751568
} // namespace
15761569

15771570
void ADIOS2IOHandlerImpl::readAttributeAllsteps(
@@ -1589,7 +1582,7 @@ void ADIOS2IOHandlerImpl::readAttributeAllsteps(
15891582
IO.SetParameter("StreamReader", "ON"); // this be for BP4
15901583
auto engine = IO.Open(fullPath(*file), adios2::Mode::Read);
15911584
auto status = engine.BeginStep();
1592-
warn_ignored_modifiable_attributes(IO, name);
1585+
warn_ignored_modifiable_attributes(IO);
15931586
auto type = detail::attributeInfo(IO, name, /* verbose = */ true);
15941587
switchType<ReadAttributeAllsteps>(
15951588
type, IO, engine, name, status, *param.resource);

0 commit comments

Comments
 (0)