From 6a91f2bb82035b3c8021a7dc7b23548ce3d61eb6 Mon Sep 17 00:00:00 2001 From: Sebastien Ponce Date: Thu, 5 Feb 2015 10:46:37 +0100 Subject: [PATCH] libradosstriper: fixed write_full when ENOENT Fixes: #10758 write_full was returning ENOENT when the file did not exists, while it should just have created it without complaining. Signed-off-by: Sebastien Ponce --- src/libradosstriper/RadosStriperImpl.cc | 2 +- src/test/libradosstriper/io.cc | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/libradosstriper/RadosStriperImpl.cc b/src/libradosstriper/RadosStriperImpl.cc index 96179ca589352..0886f8b3403c2 100644 --- a/src/libradosstriper/RadosStriperImpl.cc +++ b/src/libradosstriper/RadosStriperImpl.cc @@ -316,7 +316,7 @@ int libradosstriper::RadosStriperImpl::write_full(const std::string& soid, const bufferlist& bl) { int rc = trunc(soid, 0); - if (rc) return rc; + if (rc && rc != -ENOENT) return rc; // ENOENT is obviously ok return write(soid, bl, bl.length(), 0); } diff --git a/src/test/libradosstriper/io.cc b/src/test/libradosstriper/io.cc index 1386fcce45dae..9e56faeb0f26d 100644 --- a/src/test/libradosstriper/io.cc +++ b/src/test/libradosstriper/io.cc @@ -27,6 +27,20 @@ TEST_F(StriperTestPP, SimpleWritePP) { ASSERT_EQ(0, striper.write("SimpleWritePP", bl, sizeof(buf), 0)); } +TEST_F(StriperTest, SimpleWriteFull) { + char buf[128]; + memset(buf, 0xcc, sizeof(buf)); + ASSERT_EQ(0, rados_striper_write_full(striper, "SimpleWrite", buf, sizeof(buf))); +} + +TEST_F(StriperTestPP, SimpleWriteFullPP) { + char buf[128]; + memset(buf, 0xcc, sizeof(buf)); + bufferlist bl; + bl.append(buf, sizeof(buf)); + ASSERT_EQ(0, striper.write_full("SimpleWritePP", bl)); +} + TEST_F(StriperTest, Stat) { uint64_t psize; time_t pmtime; -- 2.39.5