]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
libradosstriper: fixed write_full when ENOENT 3633/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:08:35 +0000 (09:08 +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>
src/libradosstriper/RadosStriperImpl.cc
src/test/libradosstriper/io.cc

index 96179ca58935296cc6481d4793105b529146e80a..0886f8b3403c22c38afd2607827770711ebfe8cc 100644 (file)
@@ -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);
 }
 
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;