]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
*** empty log message ***
authorsage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Fri, 10 Jun 2005 15:51:52 +0000 (15:51 +0000)
committersage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Fri, 10 Jun 2005 15:51:52 +0000 (15:51 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@288 29311d96-e01e-0410-9327-a35deaab8ce9

ceph/TODO
ceph/client/SyntheticClient.cc
ceph/config.cc
ceph/config.h
ceph/mds/IdAllocator.cc
ceph/mds/IdAllocator.h
ceph/mds/MDCache.cc
ceph/osd/FakeStore.cc
ceph/osd/FakeStore.h
ceph/osd/OSD.cc
ceph/osd/ObjectStore.h

index b54acc4934bbaea19a084b79b8361323a83feeca..472d28f500bf5cf3ccbcdbebfb21980da7a6b6a2 100644 (file)
--- a/ceph/TODO
+++ b/ceph/TODO
@@ -9,8 +9,9 @@ big fast todo's:
  - pseudo-mega-filesystem
    - osd copy-on-write..
 
-- osd failure structures
-- heartbeatmonitor vs pingmonitor
+- osd recovery structures (per-RG, etc)
+- heartbeatmonitor vs pingmonitor?
+
 
 
 
index f0f11951b11c3058c69b4cf94d2b77ac6ff2c42d..3af316acd85fbfab4fde862ab15841b7e82a8935 100644 (file)
@@ -167,9 +167,9 @@ int SyntheticClient::make_dirs(const char *basedir, int dirs, int files, int dep
 
 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;
index 4edad99301fb45bee7daed1985c766d01e63284c..960f6acaa75b7989d6587ea6e55f08c611076463 100644 (file)
@@ -47,6 +47,13 @@ md_config_t g_conf = {
 
   mds_verify_export_dirauth: true,
 
+
+  // --- osd ---
+
+  osd_fsync: true,
+
+
+
   // --- fakeclient (mds regression testing) ---
   num_fakeclient: 100,
   fakeclient_requests: 100,
index 557aa15ed969a9b6872705e6175d57d18180695d..aefc78b704b0d4c7f6f9651b9ec2aa2f1e4bffd0 100644 (file)
@@ -39,6 +39,9 @@ struct md_config_t {
 
   bool  mds_verify_export_dirauth;     // debug flag
 
+  // osd
+  bool  osd_fsync;
+
   // fake client
   int      num_fakeclient;
   unsigned fakeclient_requests;
index 3fefc07053874f0dbc3a3428bde365e11dc317d0..aa0fd9a5d84afa5996d39872ce6b8fe3fddaf13e 100644 (file)
@@ -87,6 +87,24 @@ void IdAllocator::save()
 }
 
 
+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;
@@ -147,15 +165,7 @@ void IdAllocator::load_2(int r, bufferlist& blist, Context *onfinish)
   }
   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;
index 23359c769e2b8ff9cd8cb0715ec7ab85b3f7ac6e..95089fd2c5fef486bee4bd79706f5f5a2b111922 100644 (file)
@@ -36,6 +36,8 @@ class IdAllocator {
   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);
index 46f87d44cf936f172b0c152b9ea389bdfad1aff9..1f89fd3a639bf4284327eaf5379682ae15b9c336 100644 (file)
@@ -7198,11 +7198,13 @@ void MDCache::show_imports()
 
   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() );
        
@@ -7210,7 +7212,7 @@ void MDCache::show_imports()
                 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() );
          
index 1a41af3c111695b3be618f00048bd4eaac14e92a..fc3f94dbeab1fb46f2b0c6b5d36c999d24017f2b 100644 (file)
@@ -281,7 +281,8 @@ int FakeStore::read(object_t oid,
 
 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);
@@ -299,6 +300,10 @@ int FakeStore::write(object_t 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);
   
index 7e440ad829fcd911b7ede9391db7c4d836506333..a5a3c1619d8a13d4bda48cda6745539e519652b4 100644 (file)
@@ -52,7 +52,8 @@ class FakeStore : public ObjectStore {
                   char *buffer);
   int write(object_t oid,
                        size_t len, off_t offset,
-                       char *buffer);
+                       char *buffer,
+                       bool fsync);
 };
 
 #endif
index 53d8518140ffce651e5d8deed513b74a903e4d0b..4283f4e894526c2f60a18bc39652c05bea759a92 100644 (file)
@@ -247,7 +247,8 @@ void OSD::handle_write(MOSDWrite *m)
           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;
index 279f4bd8addca4e806ce057ae0352374195fe4a9..1344d99df2c11de34e28e0db6e8886bcfd210023 100644 (file)
@@ -26,7 +26,8 @@ class ObjectStore {
                                   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