From 917d85fec028f4279160d30deb790972d3651e26 Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Fri, 20 Nov 2015 20:18:22 +0300 Subject: [PATCH] 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 --- src/test/objectstore_bench.cc | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) 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; -- 2.47.3