From 1f086d9b63dd95e53a2077180df4da9f5c16bc4b Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Wed, 17 Jun 2009 11:23:00 -0700 Subject: [PATCH] rados: Now properly writes 0-byte files on a get. There are more debug statements in librados and Objercter too. --- src/librados.cc | 6 +++++- src/osdc/Objecter.cc | 2 ++ src/rados.cc | 14 ++++++++++---- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/librados.cc b/src/librados.cc index 99b59fe3800c6..2c8f9b47b899e 100644 --- a/src/librados.cc +++ b/src/librados.cc @@ -845,9 +845,13 @@ int RadosClient::read(PoolCtx& pool, const object_t& oid, off_t off, bufferlist& while (!done) cond.Wait(mylock); mylock.Unlock(); + dout(10) << "Objecter returned from read" << dendl; - if (bl.length() < len) + if (bl.length() < len) { + dout(10) << "Apparent error. Returned length " << bl.length() + << " less than original length "<< len << dendl; len = bl.length(); + } return len; } diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 79da15aefb5a3..774efcee6a265 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -526,7 +526,9 @@ void Objecter::handle_osd_op_reply(MOSDOpReply *m) // do callbacks if (onack) { + dout(20) << "Calling onack->finish with rc " << rc << dendl; onack->finish(rc); + dout(20) << "Finished onack-finish" << dendl; delete onack; } if (oncommit) { diff --git a/src/rados.cc b/src/rados.cc index e3da86fbea1d3..7c5e57ca2c642 100644 --- a/src/rados.cc +++ b/src/rados.cc @@ -231,7 +231,9 @@ int main(int argc, const char **argv) vector nargs; bufferlist indata, outdata; const char *outfile = 0; - + bool readData = false; + bool writeData = false; + const char *pool = 0; int concurrent_ios = 16; @@ -252,6 +254,7 @@ int main(int argc, const char **argv) exit(0); } else { cout << "read " << indata.length() << " bytes from " << fname << std::endl; + readData = true; } } else if (CONF_ARG_EQ("pool", 'p')) { CONF_SAFE_SET_ARG_VAL(&pool, OPT_STR); @@ -361,16 +364,19 @@ int main(int argc, const char **argv) if (!pool || nargs.size() < 2) usage(); object_t oid(nargs[1]); + cerr << "Beginning read" << std::endl; int r = rados.read(p, oid, 0, outdata, 0); if (r < 0) { cerr << "error reading " << oid << " from pool " << pool << ": " << strerror(-r) << std::endl; exit(0); } + else + writeData = true; } else if (strcmp(nargs[0], "put") == 0) { if (!pool || nargs.size() < 2) usage(); - if (!indata.length()) { + if (!readData) { cerr << "must specify input file" << std::endl; usage(); } @@ -466,8 +472,8 @@ int main(int argc, const char **argv) } // write data? - int len = outdata.length(); - if (len) { + if (writeData) { + int len = outdata.length(); if (outfile) { if (strcmp(outfile, "-") == 0) { ::write(1, outdata.c_str(), len); -- 2.39.5