]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
libradosstriper: fixed write_full when ENOENT 3637/head
authorSebastien Ponce <Sebastien.Ponce@cern.ch>
Thu, 5 Feb 2015 09:46:37 +0000 (10:46 +0100)
committerSebastien Ponce <sebastien.ponce@cern.ch>
Fri, 6 Feb 2015 08:12:57 +0000 (09:12 +0100)
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 <sebastien.ponce@cern.ch>
(cherry picked from commit 6a91f2bb82035b3c8021a7dc7b23548ce3d61eb6)

src/libradosstriper/RadosStriperImpl.cc
src/test/libradosstriper/io.cc

index 2460999eb31938d9a282b655154fa35c7b8df273..0f3a2e880167ac0ea8eee560d257f99986188aa8 100644 (file)
@@ -312,7 +312,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);
 }
 
index 1386fcce45daef4cc67a16b5e04320abc47536cc..9e56faeb0f26d6c057123711a39e30c195cdda12 100644 (file)
@@ -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;