]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osbench: Adds handling for the lack of required folders ( data & journal ) and adds... 6681/head
authorIgor Fedotov <ifedotov@mirantis.com>
Fri, 20 Nov 2015 17:18:22 +0000 (20:18 +0300)
committerIgor Fedotov <ifedotov@mirantis.com>
Tue, 24 Nov 2015 11:00:45 +0000 (14:00 +0300)
Signed-off-by: Igor Fedotov <ifedotov@mirantis.com>
src/test/objectstore_bench.cc

index ad8501ae02b2e5ca929a72dfe6392a58d9d5cff7..097e406981aa5a76d7c2004a59bd06dac6dfa882 100644 (file)
@@ -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 '"<<g_conf->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;