summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-12-01 14:43:07 -0800
committerSage Weil <sage@newdream.net>2009-12-01 15:00:56 -0800
commit89beb68e0e3176023a442e9f0ba58ae6754f67bb (patch)
tree6ccae48899a8a720c9ab5b80b5cab65642a9446b
parent6c34e6719046a037ce9f5956bc9469d7d0e3ec22 (diff)
downloadceph-89beb68e0e3176023a442e9f0ba58ae6754f67bb.tar.gz
mds: journal/replay rollback on MDSTableServer
We journal prepare and commit; need to do rollback to!
-rw-r--r--src/mds/MDSTableServer.cc2
-rw-r--r--src/mds/MDSTableServer.h3
-rw-r--r--src/mds/journal.cc4
3 files changed, 9 insertions, 0 deletions
diff --git a/src/mds/MDSTableServer.cc b/src/mds/MDSTableServer.cc
index 8eb6a47b54f..dc864dbc547 100644
--- a/src/mds/MDSTableServer.cc
+++ b/src/mds/MDSTableServer.cc
@@ -105,6 +105,8 @@ void MDSTableServer::handle_rollback(MMDSTableRequest *req)
{
dout(7) << "handle_rollback " << *req << dendl;
_rollback(req->tid);
+ _note_rollback(req->tid);
+ mds->mdlog->submit_entry(new ETableServer(table, TABLESERVER_OP_ROLLBACK, 0, -1, req->tid, version));
delete req;
}
diff --git a/src/mds/MDSTableServer.h b/src/mds/MDSTableServer.h
index cc2023ddd9d..b45dde96f9b 100644
--- a/src/mds/MDSTableServer.h
+++ b/src/mds/MDSTableServer.h
@@ -86,6 +86,9 @@ private:
void _note_commit(__u64 tid) {
pending_for_mds.erase(tid);
}
+ void _note_rollback(__u64 tid) {
+ pending_for_mds.erase(tid);
+ }
MDSTableServer(MDS *m, int tab) : MDSTable(m, get_mdstable_name(tab), false), table(tab) {}
diff --git a/src/mds/journal.cc b/src/mds/journal.cc
index b5caed12a49..187e32db652 100644
--- a/src/mds/journal.cc
+++ b/src/mds/journal.cc
@@ -785,6 +785,10 @@ void ETableServer::replay(MDS *mds)
server->_commit(tid);
server->_note_commit(tid);
break;
+ case TABLESERVER_OP_ROLLBACK:
+ server->_rollback(tid);
+ server->_note_rollback(tid);
+ break;
case TABLESERVER_OP_SERVER_UPDATE:
server->_server_update(mutation);
break;