From: Igor Fedotov Date: Fri, 20 Nov 2015 17:18:22 +0000 (+0300) Subject: osbench: Adds handling for the lack of required folders ( data & journal ) and adds... X-Git-Tag: v10.0.2~124^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=917d85fec028f4279160d30deb790972d3651e26;p=ceph.git osbench: Adds handling for the lack of required folders ( data & journal ) and adds checking for previous data presence to avoid assertion Signed-off-by: Igor Fedotov --- diff --git a/src/test/objectstore_bench.cc b/src/test/objectstore_bench.cc index ad8501ae02b2..097e406981aa 100644 --- a/src/test/objectstore_bench.cc +++ b/src/test/objectstore_bench.cc @@ -205,6 +205,40 @@ int main(int argc, const char *argv[]) g_conf->osd_objectstore, g_conf->osd_data, g_conf->osd_journal)); + + //Checking data folder: create if needed or error if it's not empty + DIR *dir = ::opendir(g_conf->osd_data.c_str()); + if (!dir) { + std::string cmd("mkdir -p "); + cmd+=g_conf->osd_data; + int r = ::system( cmd.c_str() ); + if( r<0 ){ + derr << "Failed to create data directory, ret = " << r << dendl; + return 1; + } + } + else { + bool non_empty = readdir(dir) != NULL && readdir(dir) != NULL && readdir(dir) != NULL; + if( non_empty ){ + derr << "Data directory '"<osd_data<<"' isn't empty, please clean it first."<< dendl; + return 1; + } + } + ::closedir(dir); + + //Create folders for journal if needed + string journal_base = g_conf->osd_journal.substr(0, g_conf->osd_journal.rfind('/')); + struct stat sb; + if (stat(journal_base.c_str(), &sb) != 0 ){ + std::string cmd("mkdir -p "); + cmd+=journal_base; + int r = ::system( cmd.c_str() ); + if( r<0 ){ + derr << "Failed to create journal directory, ret = " << r << dendl; + return 1; + } + } + if (!os) { derr << "bad objectstore type " << g_conf->osd_objectstore << dendl; return 1;