From c84e663ca3446e02a3ea3aabc8046181e1604f2f Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Thu, 27 Nov 2025 15:57:40 +0000 Subject: [PATCH] tests: LibRadosIoEC allows for overwrites / unalligned writes on crimson 1. crimson-osd does support solely the FastEC flavor of EC pools; SlowEC isn't now and won't be implemented. 2. FastEC imposes the EC overwrites support. 3. When run against crimson's EC implementation, the tests shall not enforce e.g. ENOTSUPP on overwrite. Signed-off-by: Radoslaw Zarzynski --- src/test/librados/io.cc | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/test/librados/io.cc b/src/test/librados/io.cc index a1f333edbc88..f391744de613 100644 --- a/src/test/librados/io.cc +++ b/src/test/librados/io.cc @@ -286,8 +286,10 @@ TEST_F(LibRadosIoEC, RoundTrip) { ASSERT_EQ((int)sizeof(buf2), rados_read(ioctx, "foo", buf2, sizeof(buf2), 0)); ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf))); - uint64_t off = 19; - ASSERT_EQ(-EOPNOTSUPP, rados_write(ioctx, "bar", buf, sizeof(buf), off)); + if (!is_crimson_cluster()) { + uint64_t off = 19; + ASSERT_EQ(-EOPNOTSUPP, rados_write(ioctx, "bar", buf, sizeof(buf), off)); + } } TEST_F(LibRadosIoEC, OverlappingWriteRoundTrip) { @@ -304,12 +306,14 @@ TEST_F(LibRadosIoEC, OverlappingWriteRoundTrip) { scope_guard sg(std::move(cleanup)); memset(buf, 0xcc, dbsize); ASSERT_EQ(0, rados_write(ioctx, "foo", buf, dbsize, 0)); - memset(buf2, 0xdd, bsize); - ASSERT_EQ(-EOPNOTSUPP, rados_write(ioctx, "foo", buf2, bsize, 0)); - memset(buf3, 0xdd, dbsize); - ASSERT_EQ(dbsize, rados_read(ioctx, "foo", buf3, dbsize, 0)); - // Read the same as first write - ASSERT_EQ(0, memcmp(buf3, buf, dbsize)); + if (!is_crimson_cluster()) { + memset(buf2, 0xdd, bsize); + ASSERT_EQ(-EOPNOTSUPP, rados_write(ioctx, "foo", buf2, bsize, 0)); + memset(buf3, 0xdd, dbsize); + ASSERT_EQ(dbsize, rados_read(ioctx, "foo", buf3, dbsize, 0)); + // Read the same as first write + ASSERT_EQ(0, memcmp(buf3, buf, dbsize)); + } } TEST_F(LibRadosIoEC, WriteFullRoundTrip) { @@ -348,7 +352,9 @@ TEST_F(LibRadosIoEC, AppendRoundTrip) { ASSERT_EQ(0, memcmp(buf3 + alignment, buf2, alignment)); memset(unalignedbuf, 0, uasize); ASSERT_EQ(0, rados_append(ioctx, "foo", unalignedbuf, uasize)); - ASSERT_EQ(-EOPNOTSUPP, rados_append(ioctx, "foo", unalignedbuf, uasize)); + if (!is_crimson_cluster()) { + ASSERT_EQ(-EOPNOTSUPP, rados_append(ioctx, "foo", unalignedbuf, uasize)); + } } TEST_F(LibRadosIoEC, TruncTest) { @@ -356,12 +362,14 @@ TEST_F(LibRadosIoEC, TruncTest) { char buf2[sizeof(buf)]; memset(buf, 0xaa, sizeof(buf)); ASSERT_EQ(0, rados_append(ioctx, "foo", buf, sizeof(buf))); - ASSERT_EQ(-EOPNOTSUPP, rados_trunc(ioctx, "foo", sizeof(buf) / 2)); - memset(buf2, 0, sizeof(buf2)); - // Same size - ASSERT_EQ((int)sizeof(buf), rados_read(ioctx, "foo", buf2, sizeof(buf2), 0)); - // No change - ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf))); + if (!is_crimson_cluster()) { + ASSERT_EQ(-EOPNOTSUPP, rados_trunc(ioctx, "foo", sizeof(buf) / 2)); + memset(buf2, 0, sizeof(buf2)); + // Same size + ASSERT_EQ((int)sizeof(buf), rados_read(ioctx, "foo", buf2, sizeof(buf2), 0)); + // No change + ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf))); + } } TEST_F(LibRadosIoEC, RemoveTest) { -- 2.47.3