]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
quick tweaks
authorsage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Mon, 13 Jun 2005 03:51:28 +0000 (03:51 +0000)
committersage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Mon, 13 Jun 2005 03:51:28 +0000 (03:51 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@297 29311d96-e01e-0410-9327-a35deaab8ce9

ceph/config.cc
ceph/mds/MDS.cc
ceph/mds/MDS.h
ceph/messages/MClientMountAck.h
ceph/messages/MOSDMap.h [new file with mode: 0644]
ceph/msg/Message.h
ceph/msg/Messenger.cc
ceph/osd/OSD.cc
ceph/osd/OSD.h
ceph/osdc/Filer.cc
ceph/osdc/Filer.h

index 15cdd7b17a2c586d30ba12c213aacbf43795eb67..5e34c027b162d7c688b2d81043684c30995b8a33 100644 (file)
@@ -23,7 +23,7 @@ md_config_t g_conf = {
   fake_clock: false,
   fakemessenger_serialize: true,
 
-  debug: 2,
+  debug: 15,
   
   // --- client ---
   client_cache_size: 400,
index 8666c024c2734a50c0d09435617ce9e6caa250e6..5c691b6b68454dcab0348ee00a59dc50d6969455 100644 (file)
@@ -26,6 +26,8 @@
 #include "messages/MPingAck.h"
 #include "messages/MGenericMessage.h"
 
+#include "messages/MOSDGetClusterAck.h"
+
 #include "messages/MClientMount.h"
 #include "messages/MClientMountAck.h"
 #include "messages/MClientRequest.h"
@@ -260,6 +262,10 @@ void MDS::proc_message(Message *m)
        filer->handle_osd_op_reply((class MOSDOpReply*)m);
        return;
 
+  case MSG_OSD_GETCLUSTER:
+       handle_osd_getcluster(m);
+       return;
+
        // MDS
   case MSG_MDS_SHUTDOWNSTART:
        handle_shutdown_start(m);
@@ -424,6 +430,16 @@ void MDS::my_dispatch(Message *m)
 }
 
 
+void MDS::handle_osd_getcluster(Message *m)
+{
+  dout(7) << "osd_getcluster from " << MSG_ADDR_NICE(m->get_source()) << endl;
+  
+  messenger->send_message(new MOSDGetClusterAck(osdcluster),
+                                                 m->get_source());
+  delete m;
+}
+
+
 void MDS::handle_client_mount(MClientMount *m)
 {
   // mkfs?  (sorta hack!)
index d98711680142161e1bf88281507ad7421269c796..9a0e879fe12a8b474961bc83be2606e12fb1869c 100644 (file)
@@ -182,6 +182,9 @@ class MDS : public Dispatcher {
   void handle_shutdown_start(Message *m);
   void handle_shutdown_finish(Message *m);
 
+  // osds
+  void handle_osd_getcluster(Message *m);
+
   // clients
   void handle_client_mount(class MClientMount *m);
   void handle_client_unmount(Message *m);
index b7b0936279ce9d85792bf082a757e5a807eddcdc..ad296ecc771a22d9afe9aca16a6c28a6cf86cc75 100644 (file)
@@ -25,7 +25,7 @@ class MClientMountAck : public Message {
   char *get_type_name() { return "CmntA"; }
 
   virtual void decode_payload() {  
-       int off;
+       int off = 0;
        payload.copy(off, sizeof(pcid), (char*)&pcid);
        off += sizeof(pcid);
        if (off < payload.length())
diff --git a/ceph/messages/MOSDMap.h b/ceph/messages/MOSDMap.h
new file mode 100644 (file)
index 0000000..e4f7e2f
--- /dev/null
@@ -0,0 +1,35 @@
+#ifndef __MOSDGETCLUSTERACK_H
+#define __MOSDGETCLUSTERACK_H
+
+#include "msg/Message.h"
+#include "osd/OSDCluster.h"
+
+
+class MOSDGetClusterAck : public Message {
+  bufferlist osdcluster;
+
+ public:
+  // osdcluster
+  bufferlist& get_osdcluster() { 
+       return osdcluster;
+  }
+
+  MOSDGetClusterAck(OSDCluster *oc) :
+       Message(MSG_OSD_GETCLUSTERACK) {
+       oc->encode(osdcluster);
+  }
+  MOSDGetClusterAck() {}
+
+
+  // marshalling
+  virtual void decode_payload() {
+       osdcluster.claim(payload);
+  }
+  virtual void encode_payload() {
+       payload.claim(osdcluster);
+  }
+
+  virtual char *get_type_name() { return "ogca"; }
+};
+
+#endif
index c2b120fac2ee734d109fc8213b828767d9b8cdde..83b739a80e55013bd17f25d300d977865468fd36 100644 (file)
 
 #define MSG_SHUTDOWN    6
 
-#define MSG_OSD_READ         10
-#define MSG_OSD_READREPLY    11
-#define MSG_OSD_WRITE        12
-#define MSG_OSD_WRITEREPLY   13
 #define MSG_OSD_OP           14    // delete, etc.
 #define MSG_OSD_OPREPLY      15    // delete, etc.
 #define MSG_OSD_PING         16
 
+#define MSG_OSD_GETCLUSTER    17
+#define MSG_OSD_GETCLUSTERACK 18
+
 #define MSG_CLIENT_REQUEST         20
 #define MSG_CLIENT_REPLY           21
 //#define MSG_CLIENT_DONE            22
index c3e721fd8d56366a3a17bbc62af34d7506b6b8e2..c34b88cd682a41c5ba119b1d7b1a31e68ed9f8fe 100644 (file)
@@ -21,6 +21,7 @@ using namespace std;
 #include "messages/MOSDPing.h"
 #include "messages/MOSDOp.h"
 #include "messages/MOSDOpReply.h"
+#include "messages/MOSDGetClusterAck.h"
 
 #include "messages/MClientMount.h"
 #include "messages/MClientMountAck.h"
@@ -111,6 +112,9 @@ decode_message(msg_envelope_t& env, bufferlist& payload)
   case MSG_OSD_OPREPLY:
        m = new MOSDOpReply();
        break;
+  case MSG_OSD_GETCLUSTERACK:
+       m = new MOSDGetClusterAck();
+       break;
 
        // clients
   case MSG_CLIENT_MOUNT:
@@ -250,6 +254,7 @@ decode_message(msg_envelope_t& env, bufferlist& payload)
   case MSG_MDS_SHUTDOWNFINISH:
   case MSG_SHUTDOWN:
   case MSG_CLIENT_UNMOUNT:
+  case MSG_OSD_GETCLUSTER:
        m = new MGenericMessage(env.type);
        break;
 
index c6149ab78bb43b0a47b20d2105c0e83af4301c7e..40ee79bbb6a25a02c6b23109bb85335eb2bae1d6 100644 (file)
 
 #include "msg/HostMonitor.h"
 
+#include "messages/MGenericMessage.h"
 #include "messages/MPing.h"
 #include "messages/MPingAck.h"
 #include "messages/MOSDOp.h"
 #include "messages/MOSDOpReply.h"
+#include "messages/MOSDGetClusterAck.h"
+
 
 #include <iostream>
 #include <cassert>
@@ -107,6 +110,10 @@ void OSD::dispatch(Message *m)
   case MSG_SHUTDOWN:
        shutdown();
        break;
+
+  case MSG_OSD_GETCLUSTERACK:
+       handle_getcluster_ack((MOSDGetClusterAck*)m);
+       break;
        
   case MSG_PING:
        // take note.
@@ -127,6 +134,7 @@ void OSD::dispatch(Message *m)
 }
 
 
+
 void OSD::handle_ping(MPing *m)
 {
   // play dead?
@@ -142,10 +150,37 @@ void OSD::handle_ping(MPing *m)
 }
 
 
+void OSD::handle_getcluster_ack(MOSDGetClusterAck *m)
+{
+  if (!osdcluster) osdcluster = new OSDCluster();
+  osdcluster->decode(m->get_osdcluster());
+  dout(7) << "got OSDCluster version " << osdcluster->get_version() << endl;
+  delete m;
 
+  // process waiters
+  list<MOSDOp*> waiting;
+  waiting.splice(waiting.begin(), waiting_for_osdcluster);
+
+  for (list<MOSDOp*>::iterator it = waiting.begin();
+          it != waiting.end();
+          it++) {
+       handle_op(*it);
+  }
+
+}
 
 void OSD::handle_op(MOSDOp *op)
 {
+  // starting up?
+  if (!osdcluster) {
+       dout(7) << "no OSDCluster, starting up" << endl;
+       if (waiting_for_osdcluster.empty()) 
+         messenger->send_message(new MGenericMessage(MSG_OSD_GETCLUSTER), 
+                                                         MSG_ADDR_MDS(0), MDS_PORT_MAIN);
+       waiting_for_osdcluster.push_back(op);
+       return;
+  }
+
   // check cluster version
   if (op->get_ocv() > osdcluster->get_version()) {
        // op's is newer
@@ -153,7 +188,8 @@ void OSD::handle_op(MOSDOp *op)
        
        // query MDS
        dout(7) << "querying MDS" << endl;
-       //messenger->send_message(new MGetOSDCluster(), MSG_ADDR_MDS(0), MDS_PORT_MAIN);
+       messenger->send_message(new MGenericMessage(MSG_OSD_GETCLUSTER), 
+                                                       MSG_ADDR_MDS(0), MDS_PORT_MAIN);
        assert(0);
        waiting_for_osdcluster.push_back(op);
        return;
index ce8d823ca85f7a9b3a681f08451c147fe641aa98..e328f2038b2d80b56623396b868ee74ac560d82b 100644 (file)
@@ -34,7 +34,6 @@ class ReplicaGroup {
   void enumerate_objects(list<object_t>& ls);
 };
 
-
 class OSD : public Dispatcher {
  protected:
   Messenger *messenger;
@@ -63,6 +62,7 @@ class OSD : public Dispatcher {
   virtual void dispatch(Message *m);
 
   void handle_ping(class MPing *m);
+  void handle_getcluster_ack(class MOSDGetClusterAck *m);
   void handle_op(class MOSDOp *m);
   void op_read(class MOSDOp *m);
   void op_write(class MOSDOp *m);
index 8c0e8e3fb47dfe9c88061e644df069a3e3ecfb9b..e6ea7a5bd515d3ac7d5b941314fa33e77540af10 100644 (file)
@@ -30,6 +30,9 @@ Filer::Filer(Messenger *m, OSDCluster *o)
   osdcluster = o;
 }
 
+Filer::~Filer()
+{
+}
 
 void Filer::dispatch(Message *m)
 {
@@ -44,6 +47,7 @@ void Filer::dispatch(Message *m)
   }
 }
 
+
 /*
 void Filer::queue_outgoing(Message *m, int osd)
 {
index 728b5c36f51e04c611eb02275a4839578bda2e7b..cbb0bf5a2a7ae2ddae464f53e259828b74c89697 100644 (file)
@@ -3,11 +3,14 @@
 
 /*** Filer
  *
- * client/mds interface to access "files" in OSD cluster
+ * client/mds interface to access "files" in OSD cluster.
  *
  * generic non-blocking interface for reading/writing to osds, using
  * the file-to-object mappings defined by OSDCluster.
  *
+ * Filer also handles details of replication on OSDs (to the extent that 
+ * it affects OSD clients)
+ *
  * "files" are identified by ino. 
  */
 
@@ -59,7 +62,7 @@ typedef struct {
 
 class Filer : public Dispatcher {
   OSDCluster *osdcluster;     // what osds am i dealing with?
-  Messenger *messenger;
+  Messenger  *messenger;
   
   __uint64_t         last_tid;
   hash_map<tid_t,PendingOSDRead_t*>  op_reads;
@@ -71,7 +74,7 @@ class Filer : public Dispatcher {
 
  public:
   Filer(Messenger *m, OSDCluster *o);
-  ~Filer() {}
+  ~Filer();
 
   void dispatch(Message *m);