-import: mds/mds.o osd/OSD.o msg/FakeMessenger.o import.cc ${COMMON_OBJS}
+import: mds/allmds.o osd/OSD.o msg/FakeMessenger.o import.cc ${COMMON_OBJS}
${CC} ${CFLAGS} ${LIBS} $^ -o $@
-singleclient: mds/mds.o osd/OSD.o fakesingleclient.o client/Client.o \
+singleclient: mds/allmds.o osd/OSD.o fakesingleclient.o client/Client.o \
msg/CheesySerializer.o msg/FakeMessenger.o fsck.o ${COMMON_OBJS}
${CC} ${CFLAGS} ${LIBS} $^ -o $@
msg/FakeMessenger.o ${COMMON_OBJS}
${CC} ${CFLAGS} ${LIBS} -lfuse $^ -o $@
-fakemds: test/fakemds.cc msg/FakeMessenger.o fakeclient/FakeClient.o osd/OSD.o mds/mds.o ${COMMON_OBJS}
+fakemds: test/fakemds.cc msg/FakeMessenger.o fakeclient/FakeClient.o osd/OSD.o mds/allmds.o ${COMMON_OBJS}
${CC} ${CFLAGS} ${LIBS} $^ -o $@
-mpitest: test/mpitest.o msg/MPIMessenger.cc mds/mds.o osd/OSD.o fakeclient/FakeClient.o ${COMMON_OBJS}
+mpitest: test/mpitest.o msg/MPIMessenger.cc mds/allmds.o osd/OSD.o fakeclient/FakeClient.o ${COMMON_OBJS}
${MPICC} ${CFLAGS} $^ -o $@
mttest: test/mttest.cc msg/MTMessenger.cc ${COMMON_OBJS}
${MPICC} ${CFLAGS} ${LIBS} $^ -o $@
-mpifuse: mpifuse.cc mds/mds.o client/Client.o osd/OSD.o client/fuse.o msg/MPIMessenger.cc ${COMMON_OBJS}
+mpifuse: mpifuse.cc mds/allmds.o client/Client.o osd/OSD.o client/fuse.o msg/MPIMessenger.cc ${COMMON_OBJS}
${MPICC} ${CFLAGS} ${LIBS} -lfuse $^ -o $@
-fakefuse: fakefuse.cc mds/mds.o client/Client.o osd/OSD.o client/fuse.o msg/FakeMessenger.cc msg/CheesySerializer.o ${COMMON_OBJS}
+fakefuse: fakefuse.cc mds/allmds.o client/Client.o osd/OSD.o client/fuse.o msg/FakeMessenger.cc msg/CheesySerializer.o ${COMMON_OBJS}
${CC} ${CFLAGS} ${LIBS} -lfuse $^ -o $@
clean:
rm -f *.o */*.o ${TARGETS} ${TEST_TARGETS}
-mds/mds.o: ${MDS_OBJS}
- ld -i -o mds/mds.o $^
+mds/allmds.o: ${MDS_OBJS}
+ ld -i -o mds/allmds.o $^
%.o: %.cc
${CC} ${CFLAGS} -c $< -o $@
fake_clock: false,
fakemessenger_serialize: true,
- debug: 3,
+ debug: 20,
// --- client ---
client_cache_size: 400,
#include "messages/MPing.h"
#include "messages/MGenericMessage.h"
-#include "messages/MOSDRead.h"
-#include "messages/MOSDWrite.h"
-#include "messages/MOSDReadReply.h"
-#include "messages/MOSDWriteReply.h"
-
#include "messages/MClientMount.h"
#include "messages/MClientMountAck.h"
#include "messages/MClientRequest.h"
void set_len(int len) {
this->st.len = len;
}
+ void set_result(int result) {
+ this->st.result = result;
+ }
virtual void decode_payload() {
st = *(MOSDReadReply_st*)(raw_message + MSG_ENVELOPE_LEN);
return ::stat(fn.c_str(), st);
}
-int FakeStore::destroy(object_t oid)
+int FakeStore::remove(object_t oid)
{
- dout(20) << "destroy " << oid << endl;
+ dout(20) << "remove " << oid << endl;
string fn;
make_oname(oid,fn);
return ::unlink(fn.c_str());
int stat(object_t oid,
struct stat *st);
- int destroy(object_t oid);
+ int remove(object_t oid);
int truncate(object_t oid, off_t size);
int read(object_t oid,
#include "messages/MOSDOp.h"
#include "messages/MOSDOpReply.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/file.h>
#include <iostream>
#include <cassert>
#include <errno.h>
+#include <sys/stat.h>
+
#include "include/config.h"
#undef dout
char *osd_base_path = "./osddata";
+
+
// cons/des
OSD::OSD(int id, Messenger *m)
-// -- osd_read
-
-
void OSD::handle_op(MOSDOp *op)
{
switch (op->get_op()) {
case OSD_OP_DELETE:
{
- int r = store->destroy(op->get_oid());
+ int r = store->remove(op->get_oid());
dout(3) << "delete on " << op->get_oid() << " r = " << r << endl;
// "ack"
messenger->send_message(reply,
op->get_source(), op->get_source_port());
}
+ break;
default:
assert(0);
void OSD::read(MOSDRead *r)
{
- MOSDReadReply *reply;
-
- if (!store->exists(r->get_oid())) {
- // send reply (failure)
- dout(1) << "read open FAILED on " << r->get_oid() << endl;
- reply = new MOSDReadReply(r, -1);
- //assert(0);
- }
-
// create reply, buffer
- reply = new MOSDReadReply(r, r->get_len());
+ MOSDReadReply *reply = new MOSDReadReply(r, r->get_len());
// read into a buffer
char *buf = reply->get_buffer();
long got = store->read(r->get_oid(),
r->get_len(), r->get_offset(),
buf);
- reply->set_len(got);
-
- dout(10) << "osd_read " << got << " / " << r->get_len() << " bytes from " << r->get_oid() << endl;
+ if (got >= 0)
+ reply->set_len(got); // "success" (or 0 bytes read)
+ else
+ reply->set_result(got); // error
+
+ dout(10) << "read got " << got << " / " << r->get_len() << " bytes from " << r->get_oid() << endl;
// send it
messenger->send_message(reply, r->get_source(), r->get_source_port());
void OSD::write(MOSDWrite *m)
{
-
+ // write
int r = store->write(m->get_oid(),
m->get_len(), m->get_offset(),
m->get_buffer());
- if (r < 0) {
- assert(2+2==5);
- }
+ assert(r >= 0);
- // clean up
+ // reply
MOSDWriteReply *reply = new MOSDWriteReply(m, r);
-
messenger->send_message(reply, m->get_source(), m->get_source_port());
}
virtual int init() = 0;
virtual int finalize() = 0;
- virtual bool exists(object_t oid) = 0;
+ // objects
+ virtual bool exists(object_t oid) = 0; // useful?
virtual int stat(object_t oid, struct stat *st) = 0; // struct stat?
- virtual int destroy(object_t oid) = 0;
+ virtual int remove(object_t oid) = 0;
virtual int truncate(object_t oid, off_t size) = 0;
virtual int read(object_t oid,
char *buffer) = 0;
/*
+ // attributes
virtual int setattr(...) = 0;
virtual int getattr(...) = 0;
+ // collections
virtual int collection_create(coll_t c) = 0;
virtual int collection_destroy(coll_t c) = 0;
virtual int collection_add(coll_t c, object_t o) = 0;
- virtual int collection_remote(coll_t c, object_t o) = 0;
+ virtual int collection_remove(coll_t c, object_t o) = 0;
*/
};