summaryrefslogtreecommitdiff
path: root/src/mds
diff options
context:
space:
mode:
authorAlexandre Oliva <oliva@lsd.ic.unicamp.br>2012-02-21 07:22:01 -0200
committerSage Weil <sage.weil@dreamhost.com>2012-02-22 21:21:29 -0800
commit7842bb50c7814cc16c22589bf41df7db1f7492eb (patch)
tree1745e58a5bf9167f25d2741b918470c83a13d402 /src/mds
parent761ecc69c24856b15531c92b69b1c73c5cc81bfc (diff)
downloadceph-7842bb50c7814cc16c22589bf41df7db1f7492eb.tar.gz
mds: Add old_inodes to emetablob
Add information about old inodes to the mds journal. Signed-off-by: Alexandre Oliva <oliva@lsd.ic.unicamp.br> Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
Diffstat (limited to 'src/mds')
-rw-r--r--src/mds/events/EMetaBlob.h32
-rw-r--r--src/mds/journal.cc2
2 files changed, 27 insertions, 7 deletions
diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h
index e03f14770e4..747bff36ce1 100644
--- a/src/mds/events/EMetaBlob.h
+++ b/src/mds/events/EMetaBlob.h
@@ -68,6 +68,8 @@ public:
bufferlist snapbl;
bool dirty;
struct default_file_layout *dir_layout;
+ typedef map<snapid_t, old_inode_t> old_inodes_t;
+ old_inodes_t *old_inodes;
bufferlist _enc;
@@ -77,10 +79,11 @@ public:
fullbit(const string& d, snapid_t df, snapid_t dl,
version_t v, inode_t& i, fragtree_t &dft,
map<string,bufferptr> &xa, const string& sym,
- bufferlist &sbl, bool dr, default_file_layout *defl = NULL) :
+ bufferlist &sbl, bool dr, default_file_layout *defl = NULL,
+ old_inodes_t *oi = NULL) :
//dn(d), dnfirst(df), dnlast(dl), dnv(v),
//inode(i), dirfragtree(dft), xattrs(xa), symlink(sym), snapbl(sbl), dirty(dr)
- dir_layout(NULL), _enc(1024)
+ dir_layout(NULL), old_inodes(NULL), _enc(1024)
{
::encode(d, _enc);
::encode(df, _enc);
@@ -98,15 +101,21 @@ public:
::encode(*defl, _enc);
}
::encode(dr, _enc);
+ ::encode(oi ? true : false, _enc);
+ if (oi)
+ ::encode(*oi, _enc);
}
- fullbit(bufferlist::iterator &p) : dir_layout(NULL) { decode(p); }
- fullbit() : dir_layout(NULL) {}
+ fullbit(bufferlist::iterator &p) : dir_layout(NULL), old_inodes(NULL) {
+ decode(p);
+ }
+ fullbit() : dir_layout(NULL), old_inodes(NULL) {}
~fullbit() {
+ delete old_inodes;
delete dir_layout;
}
void encode(bufferlist& bl) const {
- __u8 struct_v = 2;
+ __u8 struct_v = 3;
::encode(struct_v, bl);
assert(_enc.length());
bl.append(_enc);
@@ -135,6 +144,14 @@ public:
}
}
::decode(dirty, bl);
+ if (struct_v >= 3) {
+ bool old_inodes_present;
+ ::decode(old_inodes_present, bl);
+ if (old_inodes_present) {
+ old_inodes = new old_inodes_t;
+ ::decode(*old_inodes, bl);
+ }
+ }
}
void update_inode(MDS *mds, CInode *in);
@@ -562,7 +579,8 @@ private:
*pi, in->dirfragtree,
*in->get_projected_xattrs(),
in->symlink, snapbl,
- dirty, default_layout)));
+ dirty, default_layout,
+ &in->old_inodes)));
if (pi)
lump.get_dfull().back()->inode = *pi;
return &lump.get_dfull().back()->inode;
@@ -614,7 +632,7 @@ private:
0,
*pi, *pdft, *px,
in->symlink, snapbl,
- dirty, default_layout);
+ dirty, default_layout, &in->old_inodes);
return &root->inode;
}
diff --git a/src/mds/journal.cc b/src/mds/journal.cc
index 5f74bbb12bc..fd45213e5f2 100644
--- a/src/mds/journal.cc
+++ b/src/mds/journal.cc
@@ -416,6 +416,8 @@ void EMetaBlob::fullbit::update_inode(MDS *mds, CInode *in)
} else if (in->inode.is_symlink()) {
in->symlink = symlink;
}
+ if (old_inodes)
+ in->old_inodes = *old_inodes;
}
void EMetaBlob::replay(MDS *mds, LogSegment *logseg)