From: Sebastien Ponce Date: Thu, 5 Feb 2015 09:46:37 +0000 (+0100) Subject: libradosstriper: fixed write_full when ENOENT X-Git-Tag: v0.93~88^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F3633%2Fhead;p=ceph.git 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 --- diff --git a/src/libradosstriper/RadosStriperImpl.cc b/src/libradosstriper/RadosStriperImpl.cc index 96179ca5893..0886f8b3403 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 1386fcce45d..9e56faeb0f2 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;