]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd_remount_at
authorsage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Sat, 15 Apr 2006 21:32:15 +0000 (21:32 +0000)
committersage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Sat, 15 Apr 2006 21:32:15 +0000 (21:32 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@742 29311d96-e01e-0410-9327-a35deaab8ce9

ceph/config.cc
ceph/config.h
ceph/osd/FakeStore.cc
ceph/osd/OSD.cc
ceph/osd/OSD.h

index 85c92fc35cd88da327f408798018343bedf81f3e..764e523a5278574e173278cbb56fa1cfd0143b91 100644 (file)
@@ -55,6 +55,8 @@ md_config_t g_conf = {
   fakemessenger_serialize: true,
   fake_osdmap_expand: 0,
 
+  osd_remount_at: 0,
+
   kill_after: 0,
 
   tick: 0,
@@ -162,6 +164,7 @@ md_config_t g_conf = {
   fakestore_writesync: false,
   fakestore_syncthreads: 4,
   fakestore_fakeattr: true,   
+  fakestore_dev: 0,
 
   // --- ebofs ---
   ebofs: 0,
@@ -307,6 +310,8 @@ void parse_config_options(vector<char*>& args)
 
        else if (strcmp(args[i], "--fake_osdmap_expand") == 0) 
          g_conf.fake_osdmap_expand = atoi(args[++i]);
+       else if (strcmp(args[i], "--osd_remount_at") == 0) 
+         g_conf.osd_remount_at = atoi(args[++i]);
        //else if (strcmp(args[i], "--fake_osd_sync") == 0) 
        //g_conf.fake_osd_sync = atoi(args[++i]);
 
@@ -487,6 +492,8 @@ void parse_config_options(vector<char*>& args)
          g_conf.fakestore_fsync = atoi(args[++i]);
        else if (strcmp(args[i], "--fakestore_writesync") == 0) 
          g_conf.fakestore_writesync = atoi(args[++i]);
+       else if (strcmp(args[i], "--fakestore_dev") == 0) 
+         g_conf.fakestore_dev = args[++i];
 
        else if (strcmp(args[i], "--obfs") == 0) {
          g_conf.uofs = 1;
index 9f5beccd13b0c647a9bf3e79c56ce26cef0d4849..2c2f0c8401cbc1b28f9849ee41660cab58405933 100644 (file)
@@ -28,6 +28,8 @@ struct md_config_t {
 
   int fake_osdmap_expand;
 
+  int osd_remount_at;
+
   int kill_after;
 
   int tick;
@@ -131,6 +133,7 @@ struct md_config_t {
   bool  fakestore_writesync;
   int   fakestore_syncthreads;   // such crap
   bool  fakestore_fakeattr;
+  char  *fakestore_dev;
 
   // ebofs
   int   ebofs;
index 3dd7f3dec61209ae7aae08a6686a777027a769e5..420d2ac5b41fa5549b91fc94c9bda36a79862ad6 100644 (file)
@@ -59,6 +59,12 @@ FakeStore::FakeStore(char *base, int whoami)
 
 int FakeStore::mount() 
 {
+  if (g_conf.fakestore_dev) {
+       char cmd[100];
+       sprintf(cmd,"mount %s", g_conf.fakestore_dev);
+       system(cmd);
+  }
+
   string mydir;
   get_dir(mydir);
 
@@ -93,6 +99,12 @@ int FakeStore::umount()
 
   //delete fsync_threadpool;
 
+  if (g_conf.fakestore_dev) {
+       char cmd[100];
+       sprintf(cmd,"umount %s", g_conf.fakestore_dev);
+       system(cmd);
+  }
+
   // nothing
   return 0;
 }
index 8dd48b92c475cd99f524ac515ba6562410719413..da4cc17ed55393a37330673f045803343249e336 100644 (file)
@@ -70,6 +70,28 @@ char *ebofs_base_path = "./ebofsdev";
 #define ROLE_TYPE(x)   ((x)>0 ? 1:(x))
 
 
+class C_Remount : public Context {
+  OSD *osd;
+public:
+  C_Remount(OSD *o) : osd(o) {}
+  void finish(int) {
+       osd->force_remount();
+  }
+};
+
+void OSD::force_remount()
+{
+  dout(0) << "forcing remount" << endl;
+  osd_lock.Lock();
+  {
+       store->umount();
+       store->mount();
+  }
+  osd_lock.Unlock();
+  dout(0) << "finished remount" << endl;
+}
+
+
 
 // cons/des
 
index 36daca5c0e33196c4ce6319b5391bb24199de758..3f54a5f603e483ef5dd1c01036e3e8b15559e9df 100644 (file)
@@ -237,6 +237,8 @@ class OSD : public Dispatcher {
 
   // for replication
   void handle_op_reply(class MOSDOpReply *m);
+
+  void force_remount();
 };
 
 #endif