]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
*** empty log message ***
authorsage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Wed, 7 Jul 2004 00:10:45 +0000 (00:10 +0000)
committersage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Wed, 7 Jul 2004 00:10:45 +0000 (00:10 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@13 29311d96-e01e-0410-9327-a35deaab8ce9

16 files changed:
ceph/CDir.cc
ceph/CInode.cc
ceph/MDS.cc
ceph/MDStore.cc
ceph/include/CDir.h
ceph/include/CInode.h
ceph/include/MDCache.h
ceph/include/MDS.h
ceph/include/MDStore.h
ceph/messages/MPing.h [new file with mode: 0644]
ceph/msg/FakeMessenger.cc
ceph/msg/FakeMessenger.h
ceph/msg/Message.h
ceph/msg/Messenger.cc
ceph/msg/Messenger.h
ceph/test/fakemds.cc

index 655ff7082940c56f8cb51d10ad6ce0e2e0d3133d..a962a08d3ecf013982a143be514350f53a84a2e1 100644 (file)
@@ -61,18 +61,17 @@ void CDir::dump(int depth) {
 }
 
 
-void CDir::dump_to_disk()
+void CDir::dump_to_disk(MDS *mds)
 {
   map<string,CDentry*>::iterator iter = items.begin();
   while (iter != items.end()) {
        CDentry* d = iter->second;
        char isdir = ' ';
        if (d->inode->dir != NULL) isdir = '/';
-       cout << "dump2disk: " << d->inode->inode.ino << " " << d->name << isdir << endl;
-       d->inode->dump_to_disk();
+       //cout << "dump2disk: " << d->inode->inode.ino << " " << d->name << isdir << endl;
+       d->inode->dump_to_disk(mds);
        iter++;
   }
 
-  g_mds->mdstore->commit_dir(inode, NULL);
-
+  mds->mdstore->commit_dir(inode, NULL);
 }
index 71a0eb70294c1ce4b1d858feaa97012aa68fbf61..178b993bc4ba9009512a8772a563e0261127ec3a 100644 (file)
@@ -29,10 +29,10 @@ void CInode::dump(int dep)
        dir->dump(dep);
 }
 
-void CInode::dump_to_disk() 
+void CInode::dump_to_disk(MDS *mds
 {
   if (dir)
-       dir->dump_to_disk();
+       dir->dump_to_disk(mds);
 }
 
 
index 6998805f1004d1cd88cebcb8fa3e8abef80bed26..27b35309dc21a886be9735c9a40d64b9f7f8aff7 100644 (file)
@@ -6,11 +6,13 @@
 #include "include/MDCache.h"
 #include "include/MDStore.h"
 
+#include "messages/MPing.h"
+
 #include <iostream>
 using namespace std;
 
 // extern 
-MDS *g_mds;
+//MDS *g_mds;
 
 
 // cons/des
@@ -19,7 +21,7 @@ MDS::MDS(int id, int num, Messenger *m) {
   num_nodes = num;
   
   mdcache = new DentryCache();
-  mdstore = new MDStore();
+  mdstore = new MDStore(this);
   messenger = m;
 }
 MDS::~MDS() {
@@ -31,7 +33,7 @@ MDS::~MDS() {
 
 int MDS::init()
 {
-  messenger->init(nodeid);
+  messenger->init(this);
 }
 
 void MDS::shutdown()
@@ -41,7 +43,19 @@ void MDS::shutdown()
 
 void MDS::proc_message(Message *m) 
 {
-  cout << "implement MDS::proc_message" << endl;
+  switch (m->get_type()) {
+  case MSG_PING:
+       cout << nodeid << " received ping from " << m->get_from() << " with count " << ((MPing*)m)->num << endl;
+       if (((MPing*)m)->num > 0) {
+         cout << nodeid << " responding to " << m->get_from() << endl;
+         messenger->send_message(new MPing(((MPing*)m)->num-1), m->get_from());
+       }
+       break;
+
+  default:
+       cout << "implement MDS::proc_message" << endl;
+  }
+
 }
 
 
@@ -52,12 +66,14 @@ void MDS::proc_message(Message *m)
 class OpenRootContext : public Context {
 protected:
   Context *c;
+  MDS *mds;
 public:
-  OpenRootContext(Context *c) {
+  OpenRootContext(MDS *m, Context *c) {
+       mds = m;
        this->c = c;
   }
   void finish(int result) {
-       g_mds->open_root_2(result, c);
+       mds->open_root_2(result, c);
   }
 };
 
index 1f0aa0281b9a6e6ca4ec9e8e41e142e7c26544ed..ff1e2ff1e8b7da403d963f62045c2b60454d9618 100644 (file)
@@ -82,7 +82,7 @@ bool MDStore::fetch_dir_2( int result, char *buf, size_t buflen, CInode *dir, Co
 
          // inode
          inodeno_t ino = ((struct inode_t*)(buf+p+1))->ino;
-         if (g_mds->mdcache->have_inode(ino)) 
+         if (mds->mdcache->have_inode(ino)) 
                throw "inode already exists!  uh oh\n";
 
          // new inode
@@ -91,8 +91,8 @@ bool MDStore::fetch_dir_2( int result, char *buf, size_t buflen, CInode *dir, Co
          p += sizeof(inode_t);
                
          // add and link
-         g_mds->mdcache->add_inode( in );
-         g_mds->mdcache->link_inode( dir, dname, in );
+         mds->mdcache->add_inode( in );
+         mds->mdcache->link_inode( dir, dname, in );
        }
   }
 
index bd0cd9d0ea56002a6568b26c4cfa2a97ee883b0d..a6e7296cb85e28ab7a6d670e788a06e147bfb7e8 100644 (file)
@@ -15,6 +15,7 @@ using namespace std;
 
 class CInode;
 class CDentry;
+class MDS;
 
 // CDir
 typedef map<string, CDentry*> CDir_map_t;
@@ -51,7 +52,7 @@ class CDir {
   CDentry* lookup(string n);
 
   void dump(int d = 0);
-  void dump_to_disk();
+  void dump_to_disk(MDS *m);
 };
 
 
index 02d2088bb060c827acf9dfbe89bf804019b21d47..e4a68688fecfbc81b8aea80a95dd4ecf5ef47433 100644 (file)
@@ -8,6 +8,7 @@
 
 class CDentry;
 class CDir;
+class MDS;
 
 // cached inode wrapper
 class CInode : LRUObject {
@@ -79,7 +80,7 @@ class CInode : LRUObject {
 
   // dbg
   void dump(int d = 0);
-  void dump_to_disk();
+  void dump_to_disk(MDS *m);
 };
 
 
index f04ea64905326214e390107bd5414770b175ff63..2e3649f6e564a680d5fb5d58e88d582a7a535bef 100644 (file)
@@ -14,6 +14,8 @@
 #include "CDir.h"
 
 
+class MDS;
+
 // DCache
 
 typedef hash_map<inodeno_t, CInode*> inode_map_t;
@@ -81,8 +83,8 @@ class DentryCache {
        if (root) root->dump();
   }
 
-  void dump_to_disk() {
-       if (root) root->dump_to_disk();
+  void dump_to_disk(MDS *m) {
+       if (root) root->dump_to_disk(m);
   }
 };
 
index c9afb4c8dddc0f147265f7cf4f39096807709996..173b7a76fc5f9ff12eae511f3276ac4cbe6c6b10 100644 (file)
@@ -60,6 +60,10 @@ class MDS {
   MDS(int id, int num, Messenger *m);
   ~MDS();
 
+  int get_nodeid() {
+       return nodeid;
+  }
+
   int init();
   void shutdown();
 
@@ -71,7 +75,7 @@ class MDS {
 };
 
 
-extern MDS *g_mds;
+//extern MDS *g_mds;
 
 
 #endif
index 4392c227bbfbf16bb4ed0fe8a94895112f465ef5..bcad53dc98cafa3b3bdcdab26430b37c15af9452 100644 (file)
@@ -6,14 +6,17 @@
 #include "Context.h"
 #include "Message.h"
 
+class MDS;
+
 class MDStore {
  protected:
-
+  MDS *mds;
   
 
  public:
-  MDStore() { }
-  ~MDStore() { }
+  MDStore(MDS *m) {
+       mds = m;
+  }
 
   // i/o
   /*
diff --git a/ceph/messages/MPing.h b/ceph/messages/MPing.h
new file mode 100644 (file)
index 0000000..365df45
--- /dev/null
@@ -0,0 +1,17 @@
+
+#ifndef __MPING_H
+#define __MPING_H
+
+#include "../include/Message.h"
+
+class MPing : public Message {
+ public:
+  int num;
+  MPing(int n) {
+       num = n;
+       subsys = MSG_SUBSYS_SERVER;
+       type = MSG_PING;
+  }
+};
+
+#endif
index 37e3ed76d4980d6d8c7596682deb409fadc354a1..51be2863bfbd01f09cffd32c087d09bf4b6769f1 100644 (file)
@@ -1,5 +1,6 @@
 
 #include "include/FakeMessenger.h"
+#include "include/mds.h"
 
 #include <map>
 #include <ext/hash_map>
@@ -51,9 +52,10 @@ FakeMessenger::FakeMessenger()
 }
 
 
-int FakeMessenger::init(int whoami)
+int FakeMessenger::init(MDS *mds)
 {
-  this->whoami = whoami;
+  mymds = mds;
+  whoami = mds->get_nodeid();
   directory[ whoami ] = this;
 }
 
@@ -62,15 +64,15 @@ int FakeMessenger::shutdown()
   directory.erase(whoami);
 }
 
-bool FakeMessenger::send_message(Message *m)
+bool FakeMessenger::send_message(Message *m, int dest)
 {
-  int d = m->destination();
+  m->set_from(whoami);
   try {
-       FakeMessenger *dm = directory[d];
+       FakeMessenger *dm = directory[dest];
        dm->queue_incoming(m);
   }
   catch (...) {
-       cout << "no destination " << d << endl;
+       cout << "no destination " << dest << endl;
   }
 }
 
index 1a205efa99662190e7ae17f1b1ed3e2b24879c38..03bba7054b763e3f158de6bfe397a0cdef128365 100644 (file)
@@ -8,14 +8,15 @@
 #include <map>
 
 class FakeMessenger : public Messenger {
+ protected:
   int whoami;
   
  public:
   FakeMessenger();
   
-  virtual int init(int whoami);
+  virtual int init(MDS *m);
   virtual int shutdown();
-  virtual bool send_message(Message *m);
+  virtual bool send_message(Message *m, int dest);
   virtual int wait_message(time_t seconds);
 
   virtual int loop();
index 769bb0c91092c4839ddd2dcf2bc318316a6d73a1..d5e59d81ff32e3e3e2b959302c9c2c6b6ca7ca32 100644 (file)
@@ -23,7 +23,8 @@ class Message {
   unsigned long serial_len;
   int type;
   int subsys;
-  int dest;
+
+  int from, dest;
 
  public:
   Message() { 
@@ -44,9 +45,16 @@ class Message {
   int destination() {
        return dest;
   }
+  int get_from() {
+       return from;
+  }
+  int set_from(int f) {
+       from = f;
+       return f;
+  }
   
   // serialization
-  virtual unsigned long serialize() = 0;
+  virtual unsigned long serialize() { }   // = 0;
   void *get_serialized() {
        return serialized;
   }
index c353d944be78e45beccc4222b10dc6b0d463c8dc..ace15a3b15094d0dc1d1b81e3180251b9288c16a 100644 (file)
@@ -10,21 +10,21 @@ void Messenger::dispatch_message(Message *m)
   switch (m->get_subsys()) {
        
   case MSG_SUBSYS_MDSTORE:
-       g_mds->mdstore->proc_message(m);
+       mymds->mdstore->proc_message(m);
        break;
        
        /*
   case MSG_SUBSYS_MDLOG:
-       g_mds->logger->proc_message(m);
+       mymds->logger->proc_message(m);
        break;
        
   case MSG_SUBSYS_BALANCER:
-       g_mds->balancer->proc_message(m);
+       mymds->balancer->proc_message(m);
        break;
        */
 
   case MSG_SUBSYS_SERVER:
-       g_mds->proc_message(m);
+       mymds->proc_message(m);
        break;
   }
 }
index ad0e2a83469c7f357b52d54d1c4f5562e2d0af7b..2f9941c82ede4602c52fde5f0a0bbb9b12892fd8 100644 (file)
@@ -7,19 +7,21 @@ using namespace std;
 
 #include "Message.h"
 
+class MDS;
 
 class Messenger {
  protected:
   list<Message*> incoming;
+  MDS            *mymds;
 
  public:
   Messenger() {}
   ~Messenger() {}
 
   // ...
-  virtual int init(int whoami) = 0;
+  virtual int init(MDS *m) = 0;
   virtual int shutdown() = 0;
-  virtual bool send_message(Message *m) = 0;
+  virtual bool send_message(Message *m, int dest) = 0;
   virtual int wait_message(time_t seconds) = 0;
   
   virtual int loop() {
index d4053de750603ea7acbf194e9ef73d8985aed6b3..1706fa462ed19df2d69c626251551333dbd9fb15 100644 (file)
@@ -9,6 +9,8 @@
 #include "include/MDStore.h"
 #include "include/FakeMessenger.h"
 
+#include "messages/MPing.h"
+
 using namespace std;
 
 __uint64_t ino = 1;
@@ -62,23 +64,28 @@ int main(char **argv, int argc) {
   cout << "hi there" << endl;
 
   // init
-  g_mds = new MDS(0, 1, new FakeMessenger());
-  g_mds->open_root(NULL);
+  MDS *mds1 = new MDS(0, 2, new FakeMessenger());
+  mds1->open_root(NULL);
+  mds1->init();
 
-  g_mds->mdstore->fetch_dir( g_mds->mdcache->get_root(), NULL );
+  mds1->mdstore->fetch_dir( mds1->mdcache->get_root(), NULL );
 
+  
+  MDS *mds2 = new MDS(1,2,new FakeMessenger());
+  mds2->init();
 
   // send an initial message...?
+  mds1->messenger->send_message(new MPing(10), 1);
 
   // loop
   fakemessenger_do_loop();
 
 
   // cleanup
-  if (g_mds->mdcache->clear()) {
+  if (mds1->mdcache->clear()) {
        cout << "clean shutdown" << endl;
-       g_mds->mdcache->dump();
-       delete g_mds;
+       mds1->mdcache->dump();
+       delete mds1;
   } else {
        cout << "can't empty cache";
   }