From: sage Date: Mon, 13 Jun 2005 03:51:28 +0000 (+0000) Subject: quick tweaks X-Git-Tag: v0.1~2084 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=31551a566f8499cf6149b8feeacbc31bf5423c83;p=ceph.git quick tweaks git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@297 29311d96-e01e-0410-9327-a35deaab8ce9 --- diff --git a/ceph/config.cc b/ceph/config.cc index 15cdd7b17a2c..5e34c027b162 100644 --- a/ceph/config.cc +++ b/ceph/config.cc @@ -23,7 +23,7 @@ md_config_t g_conf = { fake_clock: false, fakemessenger_serialize: true, - debug: 2, + debug: 15, // --- client --- client_cache_size: 400, diff --git a/ceph/mds/MDS.cc b/ceph/mds/MDS.cc index 8666c024c273..5c691b6b6845 100644 --- a/ceph/mds/MDS.cc +++ b/ceph/mds/MDS.cc @@ -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!) diff --git a/ceph/mds/MDS.h b/ceph/mds/MDS.h index d98711680142..9a0e879fe12a 100644 --- a/ceph/mds/MDS.h +++ b/ceph/mds/MDS.h @@ -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); diff --git a/ceph/messages/MClientMountAck.h b/ceph/messages/MClientMountAck.h index b7b0936279ce..ad296ecc771a 100644 --- a/ceph/messages/MClientMountAck.h +++ b/ceph/messages/MClientMountAck.h @@ -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 index 000000000000..e4f7e2fbd00d --- /dev/null +++ b/ceph/messages/MOSDMap.h @@ -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 diff --git a/ceph/msg/Message.h b/ceph/msg/Message.h index c2b120fac2ee..83b739a80e55 100644 --- a/ceph/msg/Message.h +++ b/ceph/msg/Message.h @@ -10,14 +10,13 @@ #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 diff --git a/ceph/msg/Messenger.cc b/ceph/msg/Messenger.cc index c3e721fd8d56..c34b88cd682a 100644 --- a/ceph/msg/Messenger.cc +++ b/ceph/msg/Messenger.cc @@ -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; diff --git a/ceph/osd/OSD.cc b/ceph/osd/OSD.cc index c6149ab78bb4..40ee79bbb6a2 100644 --- a/ceph/osd/OSD.cc +++ b/ceph/osd/OSD.cc @@ -12,10 +12,13 @@ #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 #include @@ -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 waiting; + waiting.splice(waiting.begin(), waiting_for_osdcluster); + + for (list::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; diff --git a/ceph/osd/OSD.h b/ceph/osd/OSD.h index ce8d823ca85f..e328f2038b2d 100644 --- a/ceph/osd/OSD.h +++ b/ceph/osd/OSD.h @@ -34,7 +34,6 @@ class ReplicaGroup { void enumerate_objects(list& 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); diff --git a/ceph/osdc/Filer.cc b/ceph/osdc/Filer.cc index 8c0e8e3fb47d..e6ea7a5bd515 100644 --- a/ceph/osdc/Filer.cc +++ b/ceph/osdc/Filer.cc @@ -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) { diff --git a/ceph/osdc/Filer.h b/ceph/osdc/Filer.h index 728b5c36f51e..cbb0bf5a2a7a 100644 --- a/ceph/osdc/Filer.h +++ b/ceph/osdc/Filer.h @@ -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 op_reads; @@ -71,7 +74,7 @@ class Filer : public Dispatcher { public: Filer(Messenger *m, OSDCluster *o); - ~Filer() {} + ~Filer(); void dispatch(Message *m);