]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client describe_layout interface; monitorstore fuse-changes-cwd workaround; osdc...
authorsageweil <sageweil@29311d96-e01e-0410-9327-a35deaab8ce9>
Sat, 3 Mar 2007 01:58:35 +0000 (01:58 +0000)
committersageweil <sageweil@29311d96-e01e-0410-9327-a35deaab8ce9>
Sat, 3 Mar 2007 01:58:35 +0000 (01:58 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1167 29311d96-e01e-0410-9327-a35deaab8ce9

13 files changed:
trunk/ceph/client/Client.cc
trunk/ceph/client/Client.h
trunk/ceph/client/fuse.cc
trunk/ceph/config.cc
trunk/ceph/config.h
trunk/ceph/fakefuse.cc
trunk/ceph/mon/Monitor.cc
trunk/ceph/mon/MonitorStore.cc
trunk/ceph/osd/OSD.cc
trunk/ceph/osdc/Filer.cc
trunk/ceph/osdc/Journaler.cc
trunk/ceph/osdc/ObjectCacher.cc
trunk/ceph/osdc/Objecter.cc

index 4c1edd0afa105bc135e211698977d873b36ebf8c..72de4379443e1f9128149ec20a9553e6109e1e8f 100644 (file)
@@ -2651,6 +2651,65 @@ int Client::lazyio_synchronize(int fd, off_t offset, size_t count)
 }
 
 
+// =========================================
+// layout
+
+
+int Client::describe_layout(int fh, FileLayout *lp)
+{
+  client_lock.Lock();
+  dout(3) << "op: client->describe_layout(" << fh << ");" << endl;
+
+  assert(fh_map.count(fh));
+  Fh *f = fh_map[fh];
+  Inode *in = f->inode;
+
+  *lp = in->inode.layout;
+
+  client_lock.Unlock();
+  return 0;
+}
+
+int Client::get_stripe_unit(int fd)
+{
+  FileLayout layout;
+  describe_layout(fd, &layout);
+  return layout.stripe_size;
+}
+
+int Client::get_stripe_width(int fd)
+{
+  FileLayout layout;
+  describe_layout(fd, &layout);
+  return layout.stripe_size*layout.stripe_count;
+}
+
+int Client::get_stripe_period(int fd)
+{
+  FileLayout layout;
+  describe_layout(fd, &layout);
+  return layout.period();
+}
+
+int Client::enumerate_layout(int fh, list<ObjectExtent>& result,
+                            off_t length, off_t offset)
+{
+  client_lock.Lock();
+  dout(3) << "op: client->enumerate_layout(" << fh << ", " << length << ", " << offset << ");" << endl;
+
+  assert(fh_map.count(fh));
+  Fh *f = fh_map[fh];
+  Inode *in = f->inode;
+
+  // map to a list of extents
+  filer->file_to_extents(in->inode, offset, length, result);
+
+  client_lock.Unlock();
+  return 0;
+}
+
+
+
 void Client::ms_handle_failure(Message *m, const entity_inst_t& inst)
 {
   entity_name_t dest = inst.name;
index acefbe417a1ab4b143df5836ef9e1615c26b85eb..4ee04f8003f235d67c50e57a9fe1800b03ef3821 100644 (file)
@@ -582,8 +582,15 @@ protected:
   int lazyio_propogate(int fd, off_t offset, size_t count);
   int lazyio_synchronize(int fd, off_t offset, size_t count);
 
-  int describe_layout(char *fn, list<ObjectExtent>& result);
-
+  // expose file layout
+  int describe_layout(int fd, FileLayout* layout);
+  int get_stripe_unit(int fd);
+  int get_stripe_width(int fd);
+  int get_stripe_period(int fd);
+  int enumerate_layout(int fd, list<ObjectExtent>& result,
+                      off_t length, off_t offset);
+
+  // failure
   void ms_handle_failure(Message*, const entity_inst_t& inst);
 };
 
index 64497820f381e791bea04a96f190e8a4f692214c..86a2ce360231576362d2cda0e7d015b93a070cfe 100644 (file)
@@ -276,5 +276,8 @@ int ceph_fuse_main(Client *c, int argc, char *argv[])
   
   // go fuse go
   cout << "ok, calling fuse_main" << endl;
-  return fuse_main(newargc, newargv, &ceph_oper);
+  cout << "cwd was " << get_current_dir_name() << endl;
+  int r = fuse_main(newargc, newargv, &ceph_oper);
+  cout << "cwd now " << get_current_dir_name() << endl;
+  return r;
 }
index 207bf2e8236543a21f7082f18fd9f0ed2e5702d5..7fe1ae9b67fa65bf5e63a7a090a3c26631972b8f 100644 (file)
@@ -130,6 +130,7 @@ md_config_t g_conf = {
   mon_osd_down_out_interval: 5,  // seconds
   mon_lease: 2.000,  // seconds
   mon_stop_with_last_mds: true,
+  mon_store_abspath: false,      // make monitorstore use absolute path (to workaround fakefuse idiocy)
 
   // --- client ---
   client_cache_size: 300,
index a39f280d77f9adad8a4247aee6e16fccf0971767..4cdc8b92da97668cac3c32ca27752e449acebdc8 100644 (file)
@@ -108,6 +108,7 @@ struct md_config_t {
   int mon_osd_down_out_interval;
   float mon_lease;
   bool mon_stop_with_last_mds;
+  bool mon_store_abspath;
 
   // client
   int      client_cache_size;
index f021d83bac0358ab9d77d4dad643cef090d0850f..1b8c526069711c5fa96945610bf9910900c9a181 100644 (file)
@@ -75,6 +75,9 @@ int main(int argc, char **argv) {
   args = nargs;
   vec_to_argv(args, argc, argv);
 
+  // make monitorstore use abspath, since fuse seems to screw with the cwd
+  g_conf.mon_store_abspath = true;
+
   MonMap *monmap = new MonMap(g_conf.num_mon);
   
   Monitor *mon[g_conf.num_mon];
index 57be61def3d1114f39e05883287ba1325f74700b..8bf1d2f0cfe21a3c2b93c002ac6abfb81f49aae4 100644 (file)
@@ -53,10 +53,10 @@ void Monitor::init()
   sprintf(s, "mondata/mon%d", whoami);
   store = new MonitorStore(s);
 
-  if (g_conf.mkfs)
+  if (g_conf.mkfs) 
     store->mkfs();
-  else
-    store->mount();
+
+  store->mount();
 
   // create 
   osdmon = new OSDMonitor(this, messenger, lock);
index 35822d2db4e089bb7d6493b16185183c645c53b6..5185eb8206ded732d3ec27c35d61805bdb30afea 100644 (file)
@@ -23,7 +23,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
-
+#include <errno.h>
 
 void MonitorStore::mount()
 {
@@ -35,6 +35,14 @@ void MonitorStore::mount()
     assert(0);
   }
   ::closedir(d);
+
+  if (g_conf.mon_store_abspath) {
+    // combine it with the cwd, in case fuse screws things up (i.e. fakefuse)
+    string old = dir;
+    dir = get_current_dir_name();
+    dir += "/";
+    dir += old;
+  }
 }
 
 
@@ -99,6 +107,7 @@ void MonitorStore::put_int(version_t val, const char *a, const char *b)
   sprintf(tfn, "%s.new", fn);
 
   int fd = ::open(tfn, O_WRONLY|O_CREAT);
+  dout(0) << " fd " << fd << " tfn " << tfn << " " << errno << " " << strerror(errno) << " " << get_current_dir_name() << endl;
   assert(fd > 0);
   ::fchmod(fd, 0644);
   ::write(fd, vs, strlen(vs));
index 0d075ff4123f2a6d241a5033a30bc108d40f4360..4404822fb5e14ed521cb11d4664cf08aab4fb244 100644 (file)
@@ -143,7 +143,7 @@ OSD::OSD(int id, Messenger *m, MonMap *mm, char *dev) : timer(osd_lock)
     gethostname(hostname,100);
     
     sprintf(dev_path, "%s/osd%d", ebofs_base_path, whoami);
-    
+
     struct stat sta;
     if (::lstat(dev_path, &sta) != 0)
       sprintf(dev_path, "%s/osd.%s", ebofs_base_path, hostname);    
index 47094a30568361a63d90f3779946a3b3d947d8d8..2a2871e5b9e3745f4d3119ba4f551cb2c3a48108 100644 (file)
@@ -31,7 +31,7 @@
 
 #include "config.h"
 #undef dout
-#define dout(x)  if (x <= g_conf.debug || x <= g_conf.debug_filer) cout << g_clock.now() << " " << objecter->messenger->get_myaddr() << ".filer "
+#define dout(x)  if (x <= g_conf.debug || x <= g_conf.debug_filer) cout << g_clock.now() << " " << objecter->messenger->get_myname() << ".filer "
 
 
 class Filer::C_Probe : public Context {
index 3d9621185d998e1710dd6c62932fcad6ece0c9a7..c77c7e7d0abd4709d0a372146642f38a8abf31b0 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "config.h"
 #undef dout
-#define dout(x)  if (x <= g_conf.debug || x <= g_conf.debug_objecter) cout << g_clock.now() << " " << objecter->messenger->get_myaddr() << ".journaler "
-#define derr(x)  if (x <= g_conf.debug || x <= g_conf.debug_objecter) cerr << g_clock.now() << " " << objecter->messenger->get_myaddr() << ".journaler "
+#define dout(x)  if (x <= g_conf.debug || x <= g_conf.debug_objecter) cout << g_clock.now() << " " << objecter->messenger->get_myname() << ".journaler "
+#define derr(x)  if (x <= g_conf.debug || x <= g_conf.debug_objecter) cerr << g_clock.now() << " " << objecter->messenger->get_myname() << ".journaler "
 
 
 
index 46bd1fb416ca7e26b1378be4ce5a0567cbadd144..cb8db645f49e78cd48929927a6b15b02c36e697a 100644 (file)
@@ -11,7 +11,7 @@
 /*** ObjectCacher::Object ***/
 
 #undef dout
-#define  dout(l)    if (l<=g_conf.debug || l<=g_conf.debug_objectcacher) cout << oc->objecter->messenger->get_myaddr() << ".objectcacher.object(" << oid << ") "
+#define dout(l)    if (l<=g_conf.debug || l<=g_conf.debug_objectcacher) cout << g_clock.now() << " " << oc->objecter->messenger->get_myname() << ".objectcacher.object(" << oid << ") "
 
 
 ObjectCacher::BufferHead *ObjectCacher::Object::split(BufferHead *bh, off_t off)
@@ -371,7 +371,7 @@ ObjectCacher::BufferHead *ObjectCacher::Object::map_write(Objecter::OSDWrite *wr
 /*** ObjectCacher ***/
 
 #undef dout
-#define  dout(l)    if (l<=g_conf.debug || l<=g_conf.debug_objectcacher) cout << objecter->messenger->get_myaddr() << ".objectcacher "
+#define dout(l)    if (l<=g_conf.debug || l<=g_conf.debug_objectcacher) cout << g_clock.now() << " " << objecter->messenger->get_myname() << ".objectcacher "
 
 
 /* private */
index c531a840803b134710511b134f328b4c47473fb3..ddd22325747dbc7acc5f7484ffb28da55eb37886 100644 (file)
@@ -17,8 +17,8 @@
 
 #include "config.h"
 #undef dout
-#define dout(x)  if (x <= g_conf.debug || x <= g_conf.debug_objecter) cout << g_clock.now() << " " << messenger->get_myaddr() << ".objecter "
-#define derr(x)  if (x <= g_conf.debug || x <= g_conf.debug_objecter) cerr << g_clock.now() << " " << messenger->get_myaddr() << ".objecter "
+#define dout(x)  if (x <= g_conf.debug || x <= g_conf.debug_objecter) cout << g_clock.now() << " " << messenger->get_myname() << ".objecter "
+#define derr(x)  if (x <= g_conf.debug || x <= g_conf.debug_objecter) cerr << g_clock.now() << " " << messenger->get_myname() << ".objecter "
 
 
 // messages ------------------------------