From 21b2ea9e82d59bf1d705758d915d08721c15997f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 3 Aug 2008 15:25:15 -0700 Subject: [PATCH] mds: fix snaptable initialization/recovery, mdsmap anchortable -> tableserver --- src/mds/AnchorClient.cc | 2 +- src/mds/MDS.cc | 21 ++++++++++++--------- src/mds/MDSMap.h | 10 +++++----- src/mds/MDSTableClient.cc | 14 +++++++------- 4 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/mds/AnchorClient.cc b/src/mds/AnchorClient.cc index 603f89e9c98e7..020e2cc5e43d0 100644 --- a/src/mds/AnchorClient.cc +++ b/src/mds/AnchorClient.cc @@ -74,7 +74,7 @@ void AnchorClient::_lookup(inodeno_t ino) { MMDSTableRequest *req = new MMDSTableRequest(table, TABLE_OP_QUERY, 0, 0); ::encode(ino, req->bl); - mds->send_message_mds(req, mds->mdsmap->get_anchortable()); + mds->send_message_mds(req, mds->mdsmap->get_tableserver()); } diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 83b4ac34671bf..541a4d0ebfc29 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -772,14 +772,12 @@ void MDS::boot_create() // write empty sessionmap sessionmap.save(fin->new_sub()); - // fixme: fake out anchortable - if (mdsmap->get_anchortable() == whoami) { + // initialize tables + if (mdsmap->get_tableserver() == whoami) { dout(10) << "boot_create creating fresh anchortable" << dendl; anchorserver->reset(); anchorserver->save(fin->new_sub()); - } - if (whoami == 0) { dout(10) << "boot_create creating fresh snaptable" << dendl; snapserver->reset(); snapserver->save(fin->new_sub()); @@ -822,11 +820,10 @@ void MDS::boot_start(int step, int r) dout(2) << "boot_start " << step << ": opening sessionmap" << dendl; sessionmap.load(gather->new_sub()); - if (mdsmap->get_anchortable() == whoami) { + if (mdsmap->get_tableserver() == whoami) { dout(2) << "boot_start " << step << ": opening anchor table" << dendl; anchorserver->load(gather->new_sub()); - } - if (whoami == 0) { + dout(2) << "boot_start " << step << ": opening snap table" << dendl; snapserver->load(gather->new_sub()); } @@ -983,11 +980,14 @@ void MDS::recovery_done() assert(is_active()); // kick anchortable (resent AGREEs) - if (mdsmap->get_anchortable() == whoami) + if (mdsmap->get_tableserver() == whoami) { anchorserver->finish_recovery(); + snapserver->finish_recovery(); + } // kick anchorclient (resent COMMITs) anchorclient->finish_recovery(); + snapclient->finish_recovery(); mdcache->start_recovered_purges(); mdcache->do_file_recover(); @@ -1004,9 +1004,12 @@ void MDS::handle_mds_recovery(int who) mdcache->handle_mds_recovery(who); - if (anchorserver) + if (anchorserver) { anchorserver->handle_mds_recovery(who); + snapserver->handle_mds_recovery(who); + } anchorclient->handle_mds_recovery(who); + snapclient->handle_mds_recovery(who); queue_waiters(waiting_for_active_peer[who]); waiting_for_active_peer.erase(who); diff --git a/src/mds/MDSMap.h b/src/mds/MDSMap.h index c35098db42014..ffd47d4842a8f 100644 --- a/src/mds/MDSMap.h +++ b/src/mds/MDSMap.h @@ -105,7 +105,7 @@ class MDSMap { utime_t created; int32_t max_mds; - int32_t anchortable; // which MDS has anchortable (fixme someday) + int32_t tableserver; // which MDS has anchortable, snaptable int32_t root; // which MDS has root directory __u32 session_timeout; @@ -123,7 +123,7 @@ class MDSMap { friend class MDSMonitor; public: - MDSMap() : epoch(0), client_epoch(0), last_failure(0), anchortable(0), root(0) { + MDSMap() : epoch(0), client_epoch(0), last_failure(0), tableserver(0), root(0) { // hack.. this doesn't really belong here session_timeout = (int)g_conf.mds_session_timeout; session_autoclose = (int)g_conf.mds_session_autoclose; @@ -144,7 +144,7 @@ class MDSMap { int get_max_mds() const { return max_mds; } void set_max_mds(int m) { max_mds = m; } - int get_anchortable() const { return anchortable; } + int get_tableserver() const { return tableserver; } int get_root() const { return root; } // counts @@ -352,7 +352,7 @@ class MDSMap { ::encode(client_epoch, bl); ::encode(last_failure, bl); ::encode(created, bl); - ::encode(anchortable, bl); + ::encode(tableserver, bl); ::encode(root, bl); ::encode(session_timeout, bl); ::encode(session_autoclose, bl); @@ -372,7 +372,7 @@ class MDSMap { ::decode(client_epoch, p); ::decode(last_failure, p); ::decode(created, p); - ::decode(anchortable, p); + ::decode(tableserver, p); ::decode(root, p); ::decode(session_timeout, p); ::decode(session_autoclose, p); diff --git a/src/mds/MDSTableClient.cc b/src/mds/MDSTableClient.cc index 2eeb34c78594b..f8c1fd57519f8 100644 --- a/src/mds/MDSTableClient.cc +++ b/src/mds/MDSTableClient.cc @@ -66,7 +66,7 @@ void MDSTableClient::handle_request(class MMDSTableRequest *m) << ", already committing, resending COMMIT" << dendl; MMDSTableRequest *req = new MMDSTableRequest(table, TABLE_OP_COMMIT, 0, tid); - mds->send_message_mds(req, mds->mdsmap->get_anchortable()); + mds->send_message_mds(req, mds->mdsmap->get_tableserver()); } else { dout(10) << "stray agree on " << reqid @@ -74,7 +74,7 @@ void MDSTableClient::handle_request(class MMDSTableRequest *m) << ", sending ROLLBACK" << dendl; MMDSTableRequest *req = new MMDSTableRequest(table, TABLE_OP_ROLLBACK, 0, tid); - mds->send_message_mds(req, mds->mdsmap->get_anchortable()); + mds->send_message_mds(req, mds->mdsmap->get_tableserver()); } break; @@ -129,7 +129,7 @@ void MDSTableClient::_prepare(bufferlist& mutation, version_t *ptid, Context *on pending_prepare[reqid].ptid = ptid; pending_prepare[reqid].onfinish = onfinish; - mds->send_message_mds(req, mds->mdsmap->get_anchortable()); + mds->send_message_mds(req, mds->mdsmap->get_tableserver()); } void MDSTableClient::commit(version_t tid, LogSegment *ls) @@ -142,7 +142,7 @@ void MDSTableClient::commit(version_t tid, LogSegment *ls) // send message MMDSTableRequest *req = new MMDSTableRequest(table, TABLE_OP_COMMIT, 0, tid); - mds->send_message_mds(req, mds->mdsmap->get_anchortable()); + mds->send_message_mds(req, mds->mdsmap->get_tableserver()); } @@ -163,7 +163,7 @@ void MDSTableClient::resend_commits() ++p) { dout(10) << "resending commit on " << p->first << dendl; MMDSTableRequest *req = new MMDSTableRequest(table, TABLE_OP_COMMIT, 0, p->first); - mds->send_message_mds(req, mds->mdsmap->get_anchortable()); + mds->send_message_mds(req, mds->mdsmap->get_tableserver()); } } @@ -171,7 +171,7 @@ void MDSTableClient::handle_mds_recovery(int who) { dout(7) << "handle_mds_recovery mds" << who << dendl; - if (who != mds->mdsmap->get_anchortable()) + if (who != mds->mdsmap->get_tableserver()) return; // do nothing. resend_queries(); @@ -183,7 +183,7 @@ void MDSTableClient::handle_mds_recovery(int who) dout(10) << "resending " << p->first << dendl; MMDSTableRequest *req = new MMDSTableRequest(table, TABLE_OP_PREPARE, p->first); req->bl = p->second.mutation; - mds->send_message_mds(req, mds->mdsmap->get_anchortable()); + mds->send_message_mds(req, mds->mdsmap->get_tableserver()); } resend_commits(); -- 2.39.5