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

ceph/MDLog.cc
ceph/MDS.cc
ceph/MDStore.cc
ceph/OSD.cc
ceph/common/clock.cc
ceph/include/MDS.h
ceph/include/OSD.h
ceph/messages/MOSDReadReply.h
ceph/messages/MPing.h
ceph/msg/Messenger.h
ceph/test/fakemds.cc

index 59003cff267187cb9f5e870064ebde4095c9adf6..2100e06fd5f9fa0fa9646305cbafc5a2935affd9 100644 (file)
@@ -18,6 +18,12 @@ MDLog::MDLog(MDS *m)
 }
 
 
+MDLog::~MDLog()
+{
+  if (reader) { delete reader; reader = 0; }
+  if (writer) { delete writer; writer = 0; }
+}
+
 
 int MDLog::submit_entry( LogEvent *e,
                                                 Context *c ) 
index 017739e13267c2479cb32e6567f7daedabed7697..8b549ccda7c91122191021c99c44d963e095bb56 100644 (file)
@@ -12,7 +12,6 @@
 #include "messages/MOSDReadReply.h"
 #include "messages/MOSDWriteReply.h"
 
-
 #include <list>
 
 #include <iostream>
@@ -36,6 +35,7 @@ MDS::~MDS() {
   if (mdcache) { delete mdcache; mdcache = NULL; }
   if (mdstore) { delete mdstore; mdstore = NULL; }
   if (messenger) { delete messenger; messenger = NULL; }
+  if (mdlog) { delete mdlog; mdlog = NULL; }
 }
 
 
@@ -45,9 +45,15 @@ int MDS::init()
   messenger->init(this);
 }
 
-void MDS::shutdown()
+int MDS::shutdown()
 {
+  // shut down cache
+  mdcache->clear();
+  
+  // shut down messenger
   messenger->shutdown();
+
+  return 0;
 }
 
 void MDS::proc_message(Message *m) 
@@ -59,7 +65,8 @@ void MDS::proc_message(Message *m)
        if (((MPing*)m)->ttl > 0) {
          cout << nodeid << " responding to " << m->get_source() << endl;
          messenger->send_message(new MPing(((MPing*)m)->ttl-1), 
-                                                         m->get_source(), m->get_source_port());
+                                                         m->get_source(), m->get_source_port(),
+                                                         MDS_PORT_MAIN);
        }
        break;
 
@@ -166,12 +173,12 @@ int MDS::osd_read_finish(Message *rawm)
        *p->bytesread = m->len;
 
        if (p->buf) { // user buffer
-         memcpy(p->buf, m->buf, m->len);
+         memcpy(p->buf, m->buf, m->len);  // copy
+         delete m->buf;                   // free message buf
        } else {      // new buffer
-         // steal message's buffer   (this is probably a bad idea?  :/ )
-         *p->bufptr = m->buf;   
-         m->buf = 0;
+         *p->bufptr = m->buf;     // steal message's buffer
        }
+       m->buf = 0;
   }
 
   delete p;
@@ -192,10 +199,14 @@ int MDS::osd_read_finish(Message *rawm)
 int MDS::osd_write(int osd, object_t oid, size_t len, size_t offset, char *buf, int flags, Context *c)
 {
   osd_last_tid++;
+
+  char *nbuf = new char[len];
+  memcpy(nbuf, buf, len);
+
   MOSDWrite *m = new MOSDWrite(osd_last_tid,
                                                           oid,
                                                           len, offset,
-                                                          buf, flags);
+                                                          nbuf, flags);
   osd_writes[ osd_last_tid ] = c;
   cout << "mds: sending MOSDWrite " << m->get_type() << endl;
   messenger->send_message(m,
index 0d7b30f08f8856601862561f6faacf3fab905d4a..28b5b2f92d1d825adfa3b33108ab40ce3bea795f 100644 (file)
@@ -65,7 +65,7 @@ bool MDStore::fetch_dir_2( int result, char *buf, size_t buflen, CInode *dir, Co
        // dentry
        string dname = buf+p;
        p += dname.length() + 1;
-       cout << "parse filename " << dname << endl;
+       //cout << "parse filename " << dname << endl;
 
        // just a hard link?
        if (*(buf+p) == 'L') {
@@ -75,14 +75,13 @@ bool MDStore::fetch_dir_2( int result, char *buf, size_t buflen, CInode *dir, Co
          p++;
 
          // inode
-         inodeno_t ino = ((struct inode_t*)(buf+p+1))->ino;
-         if (mds->mdcache->have_inode(ino)) 
-               throw "inode already exists!  uh oh\n";
-
-         // new inode
          CInode *in = new CInode();
          memcpy(&in->inode, buf+p, sizeof(inode_t));
          p += sizeof(inode_t);
+         
+         cout << " got " << in->inode.ino << " " << dname << endl;
+         if (mds->mdcache->have_inode(in->inode.ino)) 
+               throw "inode already exists!  uh oh\n";
                
          // add and link
          mds->mdcache->add_inode( in );
index 5bcfa3aa58afcc79aa224abab890bbac76fd47de..180fff57e68b8072da3a9a332029c0e1e2eda665 100644 (file)
@@ -32,9 +32,16 @@ OSD::~OSD()
   if (messenger) { delete messenger; messenger = 0; }
 }
 
-void OSD::init()
+int OSD::init()
 {
   messenger->set_dispatcher(this);
+  return 0;
+}
+
+int OSD::shutdown()
+{
+  messenger->shutdown();
+  return 0;
 }
 
 
@@ -90,12 +97,12 @@ void OSD::read(MOSDRead *r)
 
   } else {
 
-       // read part of the object
-       lseek(fd, r->offset, SEEK_SET);
-       
        if (r->len == 0) {                    // read whole thing
          r->len = lseek(fd, 0, SEEK_END);  // get size
-       }
+         lseek(fd, 0, SEEK_SET);           // back to beginning
+       } else
+         lseek(fd, r->offset, SEEK_SET);   // seek     
+
        char *buf = new char[r->len];
        
        long got = ::read(fd, buf, r->len);
@@ -139,13 +146,16 @@ void OSD::write(MOSDWrite *m)
          lseek(fd, m->offset, SEEK_SET);
        long wrote = ::write(fd, m->buf, m->len);
        close(fd);
-       
+
        // reply
        reply = new MOSDWriteReply(m, wrote);
   }
 
+  // clean up
   cout << "sending reply" << endl;
   messenger->send_message(reply, m->get_source(), m->get_source_port());
+
+  delete m->buf;
   delete m;
 }
 
index 802a279788ab0fbffe5e08e4af0e06b3ab8d1e0c..c425a153bf9765c0a378d4f375ecc5d9de6144d3 100644 (file)
@@ -1,6 +1,10 @@
-
+#include <sys/types.h>
 #include "include/Clock.h"
 
+#ifndef NULL
+#define NULL 0
+#endif
+
 // public
 Clock g_clock;
 
index cca0fffd66c647b805a085a8178fed24d882a9f6..47981d618d7652f5b68cb0a4965ce76a73211e7d 100644 (file)
@@ -73,7 +73,7 @@ class MDS : public Dispatcher {
   }
 
   int init();
-  void shutdown();
+  int shutdown();
 
   void proc_message(Message *m);
   virtual void dispatch(Message *m);
index 7463a34d2d60b9c0d98bf3213b685952724d0918..7916c1aaf8c4597e1880392445be7fffc60ec0a2 100644 (file)
@@ -19,7 +19,8 @@ class OSD : public Dispatcher {
   OSD(int id, Messenger *m);
   ~OSD();
   
-  void init();
+  int init();
+  int shutdown();
 
   virtual void dispatch(Message *m);
 
index bfde8364edff1b4021f873ddcaccf6416838a310..32eff278a0d9cd89503141072e6d7c463bb7a7fe 100644 (file)
@@ -7,8 +7,6 @@
 class MOSDReadReply : public MBuffer {
  public:
   long tid;
-  long len;
-  char *buf;
   off_t offset;
   object_t oid;
   MOSDReadReply(MOSDRead *r, char *buf, long len) :
index ecb24ac324398b5787e3c3fd2ed0e8ab4684eb7a..e922968d97fcff7b151447470a62032242ad83ca 100644 (file)
@@ -7,10 +7,8 @@
 class MPing : public Message {
  public:
   int ttl;
-  MPing(int n) {
+  MPing(int n) : Message(MSG_PING) {
        ttl = n;
-       dest_port = MSG_SUBSYS_SERVER;
-       type = MSG_PING;
   }
 };
 
index 353a71a8bf25daa8b047f1adcf7a86018b9f42cb..77e7d4a4c6a56a6939e5caa817ca3490e2b2a60b 100644 (file)
@@ -26,8 +26,10 @@ class Messenger {
   void set_dispatcher(Dispatcher *d) {
        dispatcher = d;
   }
-  void remove_dispatcher() {
-       if (dispatcher) { delete dispatcher; dispatcher = 0; }
+  Dispatcher *remove_dispatcher() {
+       Dispatcher *t = dispatcher;
+       dispatcher = 0;
+       return t;
   }
 
   // ...
index 4024f20fdaf534fed53bd1a5276e1ee25f33d043..bba222c4e48ecbe48c7ce52d5487716aec46847f 100644 (file)
@@ -5,6 +5,7 @@
 #include <string>
 
 #include "include/MDS.h"
+#include "include/OSD.h"
 #include "include/MDCache.h"
 #include "include/MDStore.h"
 #include "include/FakeMessenger.h"
@@ -17,79 +18,64 @@ __uint64_t ino = 1;
 
 
 // this parses find output
+int play();
 
-DentryCache *readfiles() {
-  DentryCache *dc = new DentryCache();
-
-  string fn;
-  int offs = -1;
-  while (getline(cin, fn)) {
-       string relfn;
-
-       CInode *in = new CInode();
-
-       if (offs < 0) {
-         if (fn == "/")
-               offs = 0;
-         else 
-               offs = fn.length();
-         //cout << "offs is " << offs << " from " << fn << endl;
-         relfn = "/";
-         in->inode.ino = 1;  // root
-       } else 
-         relfn = fn.substr(offs);
-       
-       // fill out inode
-       struct stat sb;
-       stat(fn.c_str(), &sb);
-
-       in->inode.ino = ino++; //sb.st_ino;
-       in->inode.mode = sb.st_mode;
-       in->inode.size = sb.st_size;
-       in->inode.uid = sb.st_uid;
-       in->inode.gid = sb.st_gid;
-       in->inode.atime = sb.st_atime;
-       in->inode.mtime = sb.st_mtime;
-       in->inode.ctime = sb.st_ctime;
-               
-       // add
-       dc->add_file(relfn, in);
-       cout << "added " << relfn << endl;
+int main(char **argv, int argc) {
+  cout << "hi there" << endl;
+
+  try {
+       play();
+  }
+  catch (char *s) {
+       cout << "exception: " << s << endl;
   }
-  
-  return dc;
 }
 
-int main(char **argv, int argc) {
-  cout << "hi there" << endl;
+int play() {
+  cout << "hello" << endl;
 
   // init
-  MDS *mds1 = new MDS(0, 2, new FakeMessenger(MSG_ADDR_MDS(0)));
-  mds1->open_root(NULL);
-  mds1->init();
+  // create mds
+  MDS *mds[10];
+  for (int i=0; i<10; i++) {
+       mds[i] = new MDS(0, 1, new FakeMessenger(MSG_ADDR_MDS(i)));
+       mds[i]->open_root(NULL);
+       mds[i]->init();
+  }
 
-  mds1->mdstore->fetch_dir( mds1->mdcache->get_root(), NULL );
+  // create osds
+  OSD *osd[10];
+  for (int i=0; i<10; i++) {
+       osd[i] = new OSD(i, new FakeMessenger(MSG_ADDR_OSD(i)));
+       osd[i]->init();
+  }
 
-  
-  MDS *mds2 = new MDS(1,2,new FakeMessenger(MSG_ADDR_MDS(1)));
-  mds2->init();
+  // fetch root on mds0
+  mds[0]->mdstore->fetch_dir( mds[0]->mdcache->get_root(), NULL );
 
   // send an initial message...?
-  mds1->messenger->send_message(new MPing(10), 1);
+  mds[0]->messenger->send_message(new MPing(10), 1, MDS_PORT_MAIN, MDS_PORT_MAIN);
 
   // loop
   fakemessenger_do_loop();
 
-
   // cleanup
-  if (mds1->mdcache->clear()) {
-       cout << "clean shutdown" << endl;
-       mds1->mdcache->dump();
-       delete mds1;
-  } else {
-       cout << "can't empty cache";
+  for (int i=0; i<10; i++) {
+       if (mds[i]->shutdown() == 0) {
+         //cout << "clean shutdown of mds " << i << endl;
+         delete mds[i];
+       } else {
+         cout << "problems shutting down mds " << i << endl;
+       }
+
+       if (osd[i]->shutdown() == 0) { 
+         //cout << "clean shutdown of osd " << i << endl;
+         delete osd[i];
+       } else {
+         cout << "problems shutting down osd " << i << endl;
+       }
   }
-
+  cout << "done." << endl;
   return 0;
 }