]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
tests: LibRadosIoEC allows for overwrites / unalligned writes on crimson
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 27 Nov 2025 15:57:40 +0000 (15:57 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 24 Mar 2026 16:06:25 +0000 (16:06 +0000)
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 <rzarzyns@redhat.com>
src/test/librados/io.cc

index a1f333edbc8841b3040b35b59bc8ed1afaadb0d0..f391744de61313af228a2c13920ed931f9046a08 100644 (file)
@@ -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<decltype(cleanup)> 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) {