From 26a3772138dde0246b353a59f13cd15ebe02c844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franz=20P=C3=B6schel?= Date: Fri, 16 Jan 2026 16:53:59 +0100 Subject: [PATCH 1/2] Modify test to fail --- test/SerialIOTest.cpp | 79 +++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/test/SerialIOTest.cpp b/test/SerialIOTest.cpp index 7fd13822f3..77e1741f9c 100644 --- a/test/SerialIOTest.cpp +++ b/test/SerialIOTest.cpp @@ -2544,48 +2544,61 @@ TEST_CASE("patch_test", "[serial]") inline void deletion_test(const std::string &backend) { - Series o = Series("../samples/serial_deletion." + backend, Access::CREATE); + { + Series o = + Series("../samples/serial_deletion." + backend, Access::CREATE); - o.setAttribute( - "removed", - "this attribute will be removed after being written to disk"); - o.flush(); + o.setAttribute( + "removed", + "this attribute will be removed after being written to disk"); + o.flush(); - o.deleteAttribute("removed"); - o.flush(); + o.deleteAttribute("removed"); + o.flush(); - ParticleSpecies &e = o.iterations[1].particles["e"]; - auto dset = Dataset(Datatype::DOUBLE, {1}); - e["position"][RecordComponent::SCALAR].resetDataset(dset); - e["position"][RecordComponent::SCALAR].makeConstant(20.0); - e["positionOffset"][RecordComponent::SCALAR].resetDataset(dset); - e["positionOffset"][RecordComponent::SCALAR].makeConstant(22.0); - e.erase("deletion"); - e.seriesFlush(); + ParticleSpecies &e = o.iterations[1].particles["e"]; + auto dset = Dataset(Datatype::DOUBLE, {1}); + e["position"][RecordComponent::SCALAR].resetDataset(dset); + e["position"][RecordComponent::SCALAR].makeConstant(20.0); + e["positionOffset"][RecordComponent::SCALAR].resetDataset(dset); + e["positionOffset"][RecordComponent::SCALAR].makeConstant(22.0); + e.erase("deletion"); + e.seriesFlush(); - e["deletion_scalar"][RecordComponent::SCALAR].resetDataset(dset); - o.flush(); + e["deletion_scalar"][RecordComponent::SCALAR].resetDataset(dset); + o.flush(); - e["deletion_scalar"].erase(RecordComponent::SCALAR); - e.erase("deletion_scalar"); - o.flush(); + e["deletion_scalar"].erase(RecordComponent::SCALAR); + e.erase("deletion_scalar"); + o.flush(); - e["deletion_scalar_two"][RecordComponent::SCALAR].resetDataset(dset); - o.flush(); + e["deletion_scalar_two"][RecordComponent::SCALAR].resetDataset(dset); + o.flush(); - e["deletion_scalar_two"].erase( - e["deletion_scalar_two"].find(RecordComponent::SCALAR)); - e.erase(e.find("deletion_scalar_two")); - o.flush(); + e["deletion_scalar_two"].erase( + e["deletion_scalar_two"].find(RecordComponent::SCALAR)); + e.erase(e.find("deletion_scalar_two")); + o.flush(); - double value = 0.; - e["deletion_scalar_constant"][RecordComponent::SCALAR].resetDataset(dset); - e["deletion_scalar_constant"][RecordComponent::SCALAR].makeConstant(value); - o.flush(); + double value = 0.; + e["deletion_scalar_constant"][RecordComponent::SCALAR].resetDataset( + dset); + e["deletion_scalar_constant"][RecordComponent::SCALAR].makeConstant( + value); + o.flush(); - e["deletion_scalar_constant"].erase(RecordComponent::SCALAR); - e.erase("deletion_scalar_constant"); - o.flush(); + e["deletion_scalar_constant"].erase(RecordComponent::SCALAR); + e.erase("deletion_scalar_constant"); + o.flush(); + o.close(); + } + { + Series i("../samples/serial_deletion." + backend, Access::READ_ONLY); + ParticleSpecies &e = i.snapshots()[1].particles["e"]; + REQUIRE(!e.contains("deletion_scalar")); + REQUIRE(!e.contains("deletion_scalar_two")); + REQUIRE(!e.contains("deletion_scalar_constant")); + } } TEST_CASE("deletion_test", "[serial]") From ea80c9af067a806c6c01e934197e5c4ba17601e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franz=20P=C3=B6schel?= Date: Thu, 15 Jan 2026 12:07:26 +0100 Subject: [PATCH 2/2] Fix deletion --- src/IO/AbstractIOHandlerImpl.cpp | 10 ++++++++-- src/backend/BaseRecord.cpp | 8 +------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/IO/AbstractIOHandlerImpl.cpp b/src/IO/AbstractIOHandlerImpl.cpp index ec16ae4c1b..4f93ff1a5b 100644 --- a/src/IO/AbstractIOHandlerImpl.cpp +++ b/src/IO/AbstractIOHandlerImpl.cpp @@ -235,7 +235,12 @@ std::future AbstractIOHandlerImpl::flush() auto ¶meter = deref_dynamic_cast>( i.parameter.get()); writeToStderr( - "[", i.writable->parent, "->", i.writable, "] DELETE_PATH"); + "[", + i.writable->parent, + "->", + i.writable, + "] DELETE_PATH: ", + parameter.path); deletePath(i.writable, parameter); break; } @@ -248,7 +253,8 @@ std::future AbstractIOHandlerImpl::flush() i.writable->parent, "->", i.writable, - "] DELETE_DATASET"); + "] DELETE_DATASET: ", + parameter.name); deleteDataset(i.writable, parameter); break; } diff --git a/src/backend/BaseRecord.cpp b/src/backend/BaseRecord.cpp index 37d6d7b126..9c2161be0a 100644 --- a/src/backend/BaseRecord.cpp +++ b/src/backend/BaseRecord.cpp @@ -479,7 +479,7 @@ auto BaseRecord::erase(key_type const &key) -> size_type { bool const keyScalar = (key == RecordComponent::SCALAR); size_type res; - if (!keyScalar || (keyScalar && this->at(key).constant())) + if (!keyScalar) res = Container::erase(key); else { @@ -487,12 +487,6 @@ auto BaseRecord::erase(key_type const &key) -> size_type eraseScalar(); } - if (keyScalar) - { - this->setWritten(false, Attributable::EnqueueAsynchronously::No); - this->writable().abstractFilePosition.reset(); - this->get().m_datasetDefined = false; - } return res; }