- pseudo-mega-filesystem
- osd copy-on-write..
-- osd failure structures
-- heartbeatmonitor vs pingmonitor
+- osd recovery structures (per-RG, etc)
+- heartbeatmonitor vs pingmonitor?
+
int SyntheticClient::write_file(string& fn, int size) // size is in MB
{
- int wrsize = 1024*256;
+ __uint64_t wrsize = 1024*256;
char *buf = new char[wrsize]; // 1 MB
- int chunks = size * 1024*1024 / wrsize;
+ __uint64_t chunks = (__uint64_t)size * (uint64_t)(1024*1024) / wrsize;
int fd = client->open(fn.c_str(), O_WRONLY|O_CREAT);
dout(5) << "writing to " << fn << " fd " << fd << endl;
mds_verify_export_dirauth: true,
+
+ // --- osd ---
+
+ osd_fsync: true,
+
+
+
// --- fakeclient (mds regression testing) ---
num_fakeclient: 100,
fakeclient_requests: 100,
bool mds_verify_export_dirauth; // debug flag
+ // osd
+ bool osd_fsync;
+
// fake client
int num_fakeclient;
unsigned fakeclient_requests;
}
+void IdAllocator::reset()
+{
+ free.clear();
+
+ // use generic range FIXME THIS IS CRAP
+ free[ID_INO].map_insert((long long)1000000LL * (mds->get_nodeid()+1),
+ (long long)1000000LL * (mds->get_nodeid()+2) - 1);
+ //free[ID_INO].dump();
+
+ free[ID_FH].map_insert(1000000LL * (mds->get_nodeid()+1),
+ 1000000LL * (mds->get_nodeid()+2) - 1);
+ //free[ID_FH].dump();
+
+ opened = true;
+ opening = false;
+}
+
+
class C_ID_Load : public Context {
public:
IdAllocator *ida;
}
else {
dout(3) << "no alloc file, starting from scratch" << endl;
-
- // use generic range FIXME THIS IS CRAP
- free[ID_INO].map_insert((long long)1000000LL * (mds->get_nodeid()+1),
- (long long)1000000LL * (mds->get_nodeid()+2) - 1);
- //free[ID_INO].dump();
-
- free[ID_FH].map_insert(1000000LL * (mds->get_nodeid()+1),
- 1000000LL * (mds->get_nodeid()+2) - 1);
- //free[ID_FH].dump();
+ reset();
}
opened = true;
bool is_open() { return opened; }
bool is_opening() { return opening; }
+ void reset();
+
void save();
void load(Context *onfinish);
void load_2(int, bufferlist&, Context *onfinish);
set<CDir*> ecopy = exports;
+ timepair_t now = g_clock.gettimepair();
+
for (set<CDir*>::iterator it = imports.begin();
it != imports.end();
it++) {
CDir *im = *it;
- dout(7) << " + import " << *im << endl;
+ dout(7) << " + import (" << im->popularity[MDS_POP_CURDOM].get(now) << "/" << im->popularity[MDS_POP_ANYDOM].get(now) << ") " << *im << endl;
assert( im->is_import() );
assert( im->is_auth() );
p != nested_exports[im].end();
p++) {
CDir *exp = *p;
- dout(7) << " - ex " << *exp << " to " << exp->dir_auth << endl;
+ dout(7) << " - ex (" << exp->popularity[MDS_POP_NESTED].get(now) << ", " << exp->popularity[MDS_POP_ANYDOM].get(now) << ")" << *exp << " to " << exp->dir_auth << endl;
assert( exp->is_export() );
assert( !exp->is_auth() );
int FakeStore::write(object_t oid,
size_t len, off_t offset,
- char *buffer) {
+ char *buffer,
+ bool do_fsync) {
dout(20) << "write " << oid << " len " << len << " off " << offset << endl;
if (is_shadow) shadow_copy_maybe(oid);
if (actual == offset) {
did = ::write(fd, buffer, len);
}
+
+ // sync to to disk?
+ if (do_fsync) fsync(fd); // should this be fsync?
+
flock(fd, LOCK_UN);
close(fd);
char *buffer);
int write(object_t oid,
size_t len, off_t offset,
- char *buffer);
+ char *buffer,
+ bool fsync);
};
#endif
it++) {
int r = store->write(m->get_oid(),
(*it).length(), off,
- (*it).c_str());
+ (*it).c_str(),
+ g_conf.osd_fsync);
off += (*it).length();
if (r < 0) {
dout(1) << "write error on " << m->get_oid() << " r = " << r << endl;
char *buffer) = 0;
virtual int write(object_t oid,
size_t len, off_t offset,
- char *buffer) = 0;
+ char *buffer,
+ bool fsync=true) = 0;
/*
// attributes