summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-02-21 17:30:46 -0800
committerSage Weil <sage@inktank.com>2013-02-21 17:30:46 -0800
commit60ebf02a2890d8de7670924a0e89db9cefdeb144 (patch)
tree487b68efb9c35dfb48eb4e852b799d49103e1125
parent6cb53740f2c356768adfbd3cb55c007d187309d3 (diff)
parentdd007db3ca27627d6a3017c436b6745084288ee5 (diff)
downloadceph-60ebf02a2890d8de7670924a0e89db9cefdeb144.tar.gz
Merge branch 'next'
-rw-r--r--src/ceph_common.sh6
-rw-r--r--src/mds/CInode.cc64
-rw-r--r--src/mds/CInode.h47
-rw-r--r--src/mds/Locker.cc4
-rw-r--r--src/mds/MDCache.cc5
-rw-r--r--src/mds/MDS.h2
-rw-r--r--src/mds/Server.cc59
-rw-r--r--src/mds/events/EMetaBlob.h33
-rw-r--r--src/mds/journal.cc23
-rw-r--r--src/mds/mdstypes.cc35
-rw-r--r--src/mds/mdstypes.h34
-rw-r--r--src/test/encoding/types.h1
12 files changed, 96 insertions, 217 deletions
diff --git a/src/ceph_common.sh b/src/ceph_common.sh
index 47a21af85bd..af2576b3cd4 100644
--- a/src/ceph_common.sh
+++ b/src/ceph_common.sh
@@ -144,7 +144,7 @@ get_local_name_list() {
}
get_name_list() {
- orig=$1
+ orig="$*"
# extract list of monitors, mdss, osds defined in startup.conf
allconf=`$CCONF -c $conf -l mon | egrep -v '^mon$' ; \
@@ -162,14 +162,14 @@ get_name_list() {
id=`echo $f | cut -c 4- | sed 's/\\.//'`
case $f in
mon | osd | mds)
- what=`echo $allconf $local | grep ^$type || true`
+ what="$what "`echo "$allconf" "$local" | grep ^$type || true`
;;
*)
if ! echo " " $allconf $local " " | egrep -q "( $type$id | $type.$id )"; then
echo "$0: $type.$id not found ($conf defines" $allconf", /var/lib/ceph defines" $local")"
exit 1
fi
- what="$f"
+ what="$what $f"
;;
esac
done
diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc
index b2b1faf3475..9638de6b077 100644
--- a/src/mds/CInode.cc
+++ b/src/mds/CInode.cc
@@ -313,14 +313,11 @@ inode_t *CInode::project_inode(map<string,bufferptr> *px)
projected_nodes.push_back(new projected_inode_t(new inode_t(inode)));
if (px)
*px = xattrs;
- projected_nodes.back()->dir_layout = default_layout;
} else {
- file_layout_policy_t *last_dl = projected_nodes.back()->dir_layout;
projected_nodes.push_back(new projected_inode_t(
new inode_t(*projected_nodes.back()->inode)));
if (px)
*px = *get_projected_xattrs();
- projected_nodes.back()->dir_layout = last_dl;
}
projected_nodes.back()->xattrs = px;
dout(15) << "project_inode " << projected_nodes.back()->inode << dendl;
@@ -341,11 +338,6 @@ void CInode::pop_and_dirty_projected_inode(LogSegment *ls)
delete px;
}
- if (projected_nodes.front()->dir_layout != default_layout) {
- delete default_layout;
- default_layout = projected_nodes.front()->dir_layout;
- }
-
if (projected_nodes.front()->snapnode)
pop_projected_snaprealm(projected_nodes.front()->snapnode);
@@ -1061,7 +1053,7 @@ void CInode::_stored_parent(version_t v, Context *fin)
void CInode::encode_store(bufferlist& bl)
{
- ENCODE_START(3, 3, bl);
+ ENCODE_START(4, 4, bl);
::encode(inode, bl);
if (is_symlink())
::encode(symlink, bl);
@@ -1071,16 +1063,11 @@ void CInode::encode_store(bufferlist& bl)
encode_snap_blob(snapbl);
::encode(snapbl, bl);
::encode(old_inodes, bl);
- if (inode.is_dir()) {
- ::encode((default_layout ? true : false), bl);
- if (default_layout)
- ::encode(*default_layout, bl);
- }
ENCODE_FINISH(bl);
}
void CInode::decode_store(bufferlist::iterator& bl) {
- DECODE_START_LEGACY_COMPAT_LEN(3, 3, 3, bl);
+ DECODE_START_LEGACY_COMPAT_LEN(4, 4, 4, bl);
::decode(inode, bl);
if (is_symlink())
::decode(symlink, bl);
@@ -1090,13 +1077,12 @@ void CInode::decode_store(bufferlist::iterator& bl) {
::decode(snapbl, bl);
decode_snap_blob(snapbl);
::decode(old_inodes, bl);
- if (struct_v >= 2 && inode.is_dir()) {
+ if (struct_v == 2 && inode.is_dir()) {
bool default_layout_exists;
::decode(default_layout_exists, bl);
if (default_layout_exists) {
- delete default_layout;
- default_layout = new file_layout_policy_t;
- ::decode(*default_layout, bl);
+ ::decode(struct_v, bl); // this was a default_file_layout
+ ::decode(inode.layout, bl); // but we only care about the layout portion
}
}
DECODE_FINISH(bl);
@@ -1153,12 +1139,14 @@ void CInode::encode_lock_state(int type, bufferlist& bl)
case CEPH_LOCK_IFILE:
if (is_auth()) {
- ::encode(inode.layout, bl);
- ::encode(inode.size, bl);
::encode(inode.mtime, bl);
::encode(inode.atime, bl);
::encode(inode.time_warp_seq, bl);
- ::encode(inode.client_ranges, bl);
+ if (!is_dir()) {
+ ::encode(inode.layout, bl);
+ ::encode(inode.size, bl);
+ ::encode(inode.client_ranges, bl);
+ }
} else {
bool dirty = filelock.is_dirty();
::encode(dirty, bl);
@@ -1240,9 +1228,7 @@ void CInode::encode_lock_state(int type, bufferlist& bl)
case CEPH_LOCK_IPOLICY:
if (inode.is_dir()) {
- ::encode((default_layout ? true : false), bl);
- if (default_layout)
- encode(*default_layout, bl);
+ ::encode(inode.layout, bl);
}
break;
@@ -1336,12 +1322,14 @@ void CInode::decode_lock_state(int type, bufferlist& bl)
case CEPH_LOCK_IFILE:
if (!is_auth()) {
- ::decode(inode.layout, p);
- ::decode(inode.size, p);
::decode(inode.mtime, p);
::decode(inode.atime, p);
::decode(inode.time_warp_seq, p);
- ::decode(inode.client_ranges, p);
+ if (!is_dir()) {
+ ::decode(inode.layout, p);
+ ::decode(inode.size, p);
+ ::decode(inode.client_ranges, p);
+ }
} else {
bool replica_dirty;
::decode(replica_dirty, p);
@@ -1483,13 +1471,7 @@ void CInode::decode_lock_state(int type, bufferlist& bl)
case CEPH_LOCK_IPOLICY:
if (inode.is_dir()) {
- bool default_layout_exists;
- ::decode(default_layout_exists, p);
- if (default_layout_exists) {
- delete default_layout;
- default_layout = new file_layout_policy_t;
- decode(*default_layout, p);
- }
+ ::decode(inode.layout, p);
}
break;
@@ -2719,16 +2701,10 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session,
// file
i = pfile ? pi:oi;
- if (is_file()) {
- e.layout = i->layout;
- } else if (is_dir()) {
- ceph_file_layout *l = ppolicy ? get_projected_dir_layout() : ( default_layout ? &default_layout->layout : NULL );
- if (l)
- e.layout = *l;
- else
- memset(&e.layout, 0, sizeof(e.layout));
+ if (is_dir()) {
+ e.layout = (ppolicy ? pi : oi)->layout;
} else {
- memset(&e.layout, 0, sizeof(e.layout));
+ e.layout = i->layout;
}
e.size = i->size;
e.truncate_seq = i->truncate_seq;
diff --git a/src/mds/CInode.h b/src/mds/CInode.h
index 32d27bcbe13..843edf8efd6 100644
--- a/src/mds/CInode.h
+++ b/src/mds/CInode.h
@@ -211,8 +211,6 @@ public:
//bool hack_accessed;
//utime_t hack_load_stamp;
- file_layout_policy_t *default_layout;
-
/**
* Projection methods, used to store inode changes until they have been journaled,
* at which point they are popped.
@@ -230,14 +228,13 @@ public:
inode_t *inode;
map<string,bufferptr> *xattrs;
sr_t *snapnode;
- file_layout_policy_t *dir_layout;
-
- projected_inode_t() : inode(NULL), xattrs(NULL), snapnode(NULL), dir_layout(NULL) {}
- projected_inode_t(inode_t *in, sr_t *sn) : inode(in), xattrs(NULL), snapnode(sn),
- dir_layout(NULL) {}
- projected_inode_t(inode_t *in, map<string, bufferptr> *xp = NULL, sr_t *sn = NULL,
- file_layout_policy_t *dl = NULL) :
- inode(in), xattrs(xp), snapnode(sn), dir_layout(dl) {}
+
+ projected_inode_t()
+ : inode(NULL), xattrs(NULL), snapnode(NULL) {}
+ projected_inode_t(inode_t *in, sr_t *sn)
+ : inode(in), xattrs(NULL), snapnode(sn) {}
+ projected_inode_t(inode_t *in, map<string, bufferptr> *xp = NULL, sr_t *sn = NULL)
+ : inode(in), xattrs(xp), snapnode(sn) {}
};
list<projected_inode_t*> projected_nodes; // projected values (only defined while dirty)
@@ -251,21 +248,6 @@ public:
return projected_nodes.back();
}
- ceph_file_layout *get_projected_dir_layout() {
- if (!inode.is_dir())
- return NULL;
- if (projected_nodes.empty()) {
- if (default_layout)
- return &default_layout->layout;
- else
- return NULL;
- }
- else if (projected_nodes.back()->dir_layout)
- return &projected_nodes.back()->dir_layout->layout;
- else
- return NULL;
- }
-
version_t get_projected_version() {
if (projected_nodes.empty())
return inode.version;
@@ -439,7 +421,6 @@ private:
snaprealm(0), containing_realm(0),
first(f), last(l),
last_journaled(0), //last_open_journaled(0),
- default_layout(NULL),
//hack_accessed(true),
stickydir_ref(0),
parent(0),
@@ -569,11 +550,6 @@ private:
_encode_base(bl);
_encode_locks_state_for_replica(bl);
- if (inode.is_dir()) {
- ::encode((default_layout ? true : false), bl);
- if (default_layout)
- ::encode(*default_layout, bl);
- }
}
void decode_replica(bufferlist::iterator& p, bool is_new) {
__u32 nonce;
@@ -582,15 +558,6 @@ private:
_decode_base(p);
_decode_locks_state(p, is_new);
- if (inode.is_dir()) {
- bool default_layout_exists;
- ::decode(default_layout_exists, p);
- if (default_layout_exists) {
- delete default_layout;
- default_layout = new file_layout_policy_t;
- ::decode(*default_layout, p);
- }
- }
}
diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc
index da6661889ef..55e4a371ad2 100644
--- a/src/mds/Locker.cc
+++ b/src/mds/Locker.cc
@@ -154,8 +154,8 @@ void Locker::include_snap_rdlocks_wlayout(set<SimpleLock*>& rdlocks, CInode *in,
rdlocks.insert(&t->snaplock);
if (!found_layout) {
rdlocks.insert(&t->policylock);
- if (t->get_projected_dir_layout()) {
- *layout = t->get_projected_dir_layout();
+ if (t->get_projected_inode()->has_layout()) {
+ *layout = &t->get_projected_inode()->layout;
found_layout = true;
}
}
diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc
index 8762400ab55..32c87f9c688 100644
--- a/src/mds/MDCache.cc
+++ b/src/mds/MDCache.cc
@@ -311,9 +311,8 @@ CInode *MDCache::create_system_inode(inodeno_t ino, int mode)
CInode *MDCache::create_root_inode()
{
CInode *i = create_system_inode(MDS_INO_ROOT, S_IFDIR|0755);
- i->default_layout = new struct file_layout_policy_t;
- i->default_layout->layout = default_file_layout;
- i->default_layout->layout.fl_pg_pool = mds->mdsmap->get_first_data_pool();
+ i->inode.layout = default_file_layout;
+ i->inode.layout.fl_pg_pool = mds->mdsmap->get_first_data_pool();
return i;
}
diff --git a/src/mds/MDS.h b/src/mds/MDS.h
index 50555e831d9..42e8516cbe5 100644
--- a/src/mds/MDS.h
+++ b/src/mds/MDS.h
@@ -35,7 +35,7 @@
#include "SessionMap.h"
-#define CEPH_MDS_PROTOCOL 14 /* cluster internal */
+#define CEPH_MDS_PROTOCOL 15 /* cluster internal */
enum {
diff --git a/src/mds/Server.cc b/src/mds/Server.cc
index 38c7642bd7c..1dd3302c94d 100644
--- a/src/mds/Server.cc
+++ b/src/mds/Server.cc
@@ -3451,50 +3451,47 @@ void Server::handle_client_setdirlayout(MDRequest *mdr)
return;
// validate layout
- file_layout_policy_t *layout = new file_layout_policy_t;
- if (cur->get_projected_dir_layout())
- layout->layout = *cur->get_projected_dir_layout();
+ inode_t *pi = cur->get_projected_inode();
+ ceph_file_layout layout;
+ if (pi->has_layout())
+ layout = pi->layout;
else if (dir_layout)
- layout->layout = *dir_layout;
+ layout = *dir_layout;
else
- layout->layout = mds->mdcache->default_file_layout;
+ layout = mds->mdcache->default_file_layout;
if (req->head.args.setlayout.layout.fl_object_size > 0)
- layout->layout.fl_object_size = req->head.args.setlayout.layout.fl_object_size;
+ layout.fl_object_size = req->head.args.setlayout.layout.fl_object_size;
if (req->head.args.setlayout.layout.fl_stripe_unit > 0)
- layout->layout.fl_stripe_unit = req->head.args.setlayout.layout.fl_stripe_unit;
+ layout.fl_stripe_unit = req->head.args.setlayout.layout.fl_stripe_unit;
if (req->head.args.setlayout.layout.fl_stripe_count > 0)
- layout->layout.fl_stripe_count=req->head.args.setlayout.layout.fl_stripe_count;
+ layout.fl_stripe_count=req->head.args.setlayout.layout.fl_stripe_count;
if (req->head.args.setlayout.layout.fl_cas_hash > 0)
- layout->layout.fl_cas_hash = req->head.args.setlayout.layout.fl_cas_hash;
+ layout.fl_cas_hash = req->head.args.setlayout.layout.fl_cas_hash;
if (req->head.args.setlayout.layout.fl_object_stripe_unit > 0)
- layout->layout.fl_object_stripe_unit = req->head.args.setlayout.layout.fl_object_stripe_unit;
+ layout.fl_object_stripe_unit = req->head.args.setlayout.layout.fl_object_stripe_unit;
if (req->head.args.setlayout.layout.fl_pg_pool > 0) {
- layout->layout.fl_pg_pool = req->head.args.setlayout.layout.fl_pg_pool;
-
+ layout.fl_pg_pool = req->head.args.setlayout.layout.fl_pg_pool;
// make sure we have as new a map as the client
if (req->get_mdsmap_epoch() > mds->mdsmap->get_epoch()) {
- delete layout;
mds->wait_for_mdsmap(req->get_mdsmap_epoch(), new C_MDS_RetryRequest(mdcache, mdr));
return;
- }
+ }
}
- if (!ceph_file_layout_is_valid(&layout->layout)) {
+ if (!ceph_file_layout_is_valid(&layout)) {
dout(10) << "bad layout" << dendl;
reply_request(mdr, -EINVAL);
- delete layout;
return;
}
- if (!mds->mdsmap->is_data_pool(layout->layout.fl_pg_pool)) {
- dout(10) << " invalid data pool " << layout->layout.fl_pg_pool << dendl;
+ if (!mds->mdsmap->is_data_pool(layout.fl_pg_pool)) {
+ dout(10) << " invalid data pool " << layout.fl_pg_pool << dendl;
reply_request(mdr, -EINVAL);
- delete layout;
return;
}
- cur->project_inode();
- cur->get_projected_node()->dir_layout = layout;
- cur->get_projected_inode()->version = cur->pre_dirty();
+ pi = cur->project_inode();
+ pi->layout = layout;
+ pi->version = cur->pre_dirty();
// log + wait
mdr->ls = mdlog->get_current_segment();
@@ -3613,16 +3610,16 @@ void Server::handle_set_vxattr(MDRequest *mdr, CInode *cur,
return;
}
- file_layout_policy_t *dlayout = new file_layout_policy_t;
- if (cur->get_projected_dir_layout())
- dlayout->layout = *cur->get_projected_dir_layout();
+ ceph_file_layout layout;
+ if (cur->get_projected_inode()->has_layout())
+ layout = cur->get_projected_inode()->layout;
else if (dir_layout)
- dlayout->layout = *dir_layout;
+ layout = *dir_layout;
else
- dlayout->layout = mds->mdcache->default_file_layout;
+ layout = mds->mdcache->default_file_layout;
rest = name.substr(name.find("layout"));
- int r = parse_layout_vxattr(rest, value, &dlayout->layout);
+ int r = parse_layout_vxattr(rest, value, &layout);
if (r < 0) {
if (r == -ENOENT) {
if (!mdr->waited_for_osdmap) {
@@ -3644,7 +3641,7 @@ void Server::handle_set_vxattr(MDRequest *mdr, CInode *cur,
return;
pi = cur->project_inode();
- cur->get_projected_node()->dir_layout = dlayout;
+ cur->get_projected_inode()->layout = layout;
} else {
if (!cur->is_file()) {
reply_request(mdr, -EINVAL);
@@ -3714,7 +3711,7 @@ void Server::handle_remove_vxattr(MDRequest *mdr, CInode *cur,
return;
}
- if (!cur->get_projected_dir_layout()) {
+ if (!cur->get_projected_inode()->has_layout()) {
reply_request(mdr, -ENODATA);
return;
}
@@ -3724,7 +3721,7 @@ void Server::handle_remove_vxattr(MDRequest *mdr, CInode *cur,
return;
cur->project_inode();
- cur->get_projected_node()->dir_layout = NULL;
+ cur->get_projected_inode()->clear_layout();
cur->get_projected_inode()->version = cur->pre_dirty();
// log + wait
diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h
index d1baefe9402..b098f84a08e 100644
--- a/src/mds/events/EMetaBlob.h
+++ b/src/mds/events/EMetaBlob.h
@@ -68,7 +68,6 @@ public:
string symlink;
bufferlist snapbl;
bool dirty;
- struct file_layout_policy_t *dir_layout;
typedef map<snapid_t, old_inode_t> old_inodes_t;
old_inodes_t old_inodes;
@@ -80,11 +79,11 @@ public:
fullbit(const string& d, snapid_t df, snapid_t dl,
version_t v, const inode_t& i, const fragtree_t &dft,
const map<string,bufferptr> &xa, const string& sym,
- const bufferlist &sbl, bool dr, const file_layout_policy_t *defl = NULL,
+ const bufferlist &sbl, bool dr,
const 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)
+ _enc(1024)
{
::encode(d, _enc);
::encode(df, _enc);
@@ -97,27 +96,23 @@ public:
if (i.is_dir()) {
::encode(dft, _enc);
::encode(sbl, _enc);
- ::encode((defl ? true : false), _enc);
- if (defl)
- ::encode(*defl, _enc);
}
::encode(dr, _enc);
::encode(oi ? true : false, _enc);
if (oi)
::encode(*oi, _enc);
}
- fullbit(bufferlist::iterator &p) : dir_layout(NULL) {
+ fullbit(bufferlist::iterator &p) {
decode(p);
}
- fullbit() : dir_layout(NULL) {}
- ~fullbit() {
- delete dir_layout;
- }
+ fullbit() {}
+ ~fullbit() {}
void encode(bufferlist& bl) const;
void decode(bufferlist::iterator &bl);
void dump(Formatter *f) const;
static void generate_test_instances(list<EMetaBlob::fullbit*>& ls);
+
void update_inode(MDS *mds, CInode *in);
void print(ostream& out) const {
@@ -429,12 +424,6 @@ private:
//cout << "journaling " << in->inode.ino << " at " << my_offset << std::endl;
inode_t *pi = in->get_projected_inode();
- file_layout_policy_t *default_layout = NULL;
- if (in->is_dir())
- default_layout = (in->get_projected_node() ?
- in->get_projected_node()->dir_layout :
- in->default_layout);
-
bufferlist snapbl;
sr_t *sr = in->get_projected_srnode();
if (sr)
@@ -447,7 +436,7 @@ private:
*pi, in->dirfragtree,
*in->get_projected_xattrs(),
in->symlink, snapbl,
- dirty, default_layout,
+ dirty,
&in->old_inodes)));
}
@@ -478,12 +467,6 @@ private:
if (!pdft) pdft = &in->dirfragtree;
if (!px) px = &in->xattrs;
- file_layout_policy_t *default_layout = NULL;
- if (in->is_dir())
- default_layout = (in->get_projected_node() ?
- in->get_projected_node()->dir_layout :
- in->default_layout);
-
bufferlist snapbl;
if (psnapbl)
snapbl = *psnapbl;
@@ -500,7 +483,7 @@ private:
string empty;
roots.push_back(std::tr1::shared_ptr<fullbit>(new fullbit(empty, in->first, in->last,
0, *pi, *pdft, *px, in->symlink,
- snapbl, dirty, default_layout,
+ snapbl, dirty,
&in->old_inodes)));
}
diff --git a/src/mds/journal.cc b/src/mds/journal.cc
index 1fb58c6b7ca..09072cef0d8 100644
--- a/src/mds/journal.cc
+++ b/src/mds/journal.cc
@@ -382,10 +382,10 @@ void EMetaBlob::update_segment(LogSegment *ls)
// EMetaBlob::fullbit
void EMetaBlob::fullbit::encode(bufferlist& bl) const {
- ENCODE_START(4, 4, bl);
+ ENCODE_START(5, 5, bl);
if (!_enc.length()) {
fullbit copy(dn, dnfirst, dnlast, dnv, inode, dirfragtree, xattrs, symlink,
- snapbl, dirty, dir_layout, &old_inodes);
+ snapbl, dirty, &old_inodes);
bl.append(copy._enc);
} else {
bl.append(_enc);
@@ -394,7 +394,7 @@ void EMetaBlob::fullbit::encode(bufferlist& bl) const {
}
void EMetaBlob::fullbit::decode(bufferlist::iterator &bl) {
- DECODE_START_LEGACY_COMPAT_LEN(4, 4, 4, bl);
+ DECODE_START_LEGACY_COMPAT_LEN(5, 5, 5, bl);
::decode(dn, bl);
::decode(dnfirst, bl);
::decode(dnlast, bl);
@@ -406,12 +406,13 @@ void EMetaBlob::fullbit::decode(bufferlist::iterator &bl) {
if (inode.is_dir()) {
::decode(dirfragtree, bl);
::decode(snapbl, bl);
- if (struct_v >= 2) {
+ if ((struct_v == 2) || (struct_v == 3)) {
bool dir_layout_exists;
::decode(dir_layout_exists, bl);
if (dir_layout_exists) {
- dir_layout = new file_layout_policy_t;
- ::decode(*dir_layout, bl);
+ __u8 dir_struct_v;
+ ::decode(dir_struct_v, bl); // default_file_layout version
+ ::decode(inode.layout, bl); // and actual layout, that we care about
}
}
}
@@ -460,9 +461,10 @@ void EMetaBlob::fullbit::dump(Formatter *f) const
if (inode.is_dir()) {
f->dump_stream("frag tree") << dirfragtree;
f->dump_string("has_snapbl", snapbl.length() ? "true" : "false");
- if (dir_layout) {
+ if (inode.has_layout()) {
f->open_object_section("file layout policy");
- dir_layout->dump(f);
+ // FIXME
+ f->dump_string("layout", "the layout exists");
f->close_section(); // file layout policy
}
}
@@ -488,7 +490,7 @@ void EMetaBlob::fullbit::generate_test_instances(list<EMetaBlob::fullbit*>& ls)
bufferlist empty_snapbl;
fullbit *sample = new fullbit("/testdn", 0, 0, 0,
inode, fragtree, empty_xattrs, "", empty_snapbl,
- false, NULL, NULL);
+ false, NULL);
ls.push_back(sample);
}
@@ -504,9 +506,6 @@ void EMetaBlob::fullbit::update_inode(MDS *mds, CInode *in)
in->force_dirfrags();
}
- delete in->default_layout;
- in->default_layout = dir_layout;
- dir_layout = NULL;
/*
* we can do this before linking hte inode bc the split_at would
* be a no-op.. we have no children (namely open snaprealms) to
diff --git a/src/mds/mdstypes.cc b/src/mds/mdstypes.cc
index 6b87c221e56..65e16bf80da 100644
--- a/src/mds/mdstypes.cc
+++ b/src/mds/mdstypes.cc
@@ -4,24 +4,6 @@
#include "mdstypes.h"
#include "common/Formatter.h"
-/*
- * file_layout_policy_t
- */
-
-void file_layout_policy_t::encode(bufferlist &bl) const
-{
- ENCODE_START(2, 2, bl);
- ::encode(layout, bl);
- ENCODE_FINISH(bl);
-}
-
-void file_layout_policy_t::decode(bufferlist::iterator& bl)
-{
- DECODE_START_LEGACY_COMPAT_LEN(2, 2, 2, bl);
- ::decode(layout, bl);
- DECODE_FINISH(bl);
-}
-
void dump(const ceph_file_layout& l, Formatter *f)
{
f->dump_unsigned("stripe_unit", l.fl_stripe_unit);
@@ -40,23 +22,6 @@ void dump(const ceph_dir_layout& l, Formatter *f)
f->dump_unsigned("dir_hash", l.dl_dir_hash);
}
-void file_layout_policy_t::dump(Formatter *f) const
-{
- ::dump(layout, f);
-}
-
-void file_layout_policy_t::generate_test_instances(list<file_layout_policy_t*>& ls)
-{
- ls.push_back(new file_layout_policy_t);
- ls.push_back(new file_layout_policy_t);
- ls.back()->layout.fl_stripe_unit = 1024;
- ls.back()->layout.fl_stripe_count = 2;
- ls.back()->layout.fl_object_size = 2048;
- ls.back()->layout.fl_cas_hash = 3;
- ls.back()->layout.fl_object_stripe_unit = 8;
- ls.back()->layout.fl_pg_pool = 9;
-}
-
/*
* frag_info_t
diff --git a/src/mds/mdstypes.h b/src/mds/mdstypes.h
index 7b25d3a5c27..a67ff254984 100644
--- a/src/mds/mdstypes.h
+++ b/src/mds/mdstypes.h
@@ -108,25 +108,6 @@ inline string ccap_string(int cap)
}
-/**
- * Default file layout stuff. This lets us set a default file layout on
- * a directory inode that all files in its tree will use on creation.
- */
-struct file_layout_policy_t {
- ceph_file_layout layout;
-
- file_layout_policy_t() {
- memset(&layout, 0, sizeof(layout));
- }
-
- void encode(bufferlist &bl) const;
- void decode(bufferlist::iterator& bl);
- void dump(Formatter *f) const;
- static void generate_test_instances(list<file_layout_policy_t*>& ls);
-};
-WRITE_CLASS_ENCODER(file_layout_policy_t);
-
-
struct scatter_info_t {
version_t version;
@@ -371,7 +352,7 @@ struct inode_t {
truncate_pending(0),
time_warp_seq(0),
version(0), file_data_version(0), xattr_version(0), last_renamed_version(0) {
- memset(&layout, 0, sizeof(layout));
+ clear_layout();
memset(&dir_layout, 0, sizeof(dir_layout));
}
@@ -391,6 +372,19 @@ struct inode_t {
truncate_pending++;
}
+ bool has_layout() const {
+ // why on earth is there no converse of memchr() in string.h?
+ const char *p = (const char *)&layout;
+ for (size_t i = 0; i < sizeof(layout); i++)
+ if (p[i] != '\0')
+ return true;
+ return false;
+ }
+
+ void clear_layout() {
+ memset(&layout, 0, sizeof(layout));
+ }
+
uint64_t get_layout_size_increment() {
return (uint64_t)layout.fl_object_size * (uint64_t)layout.fl_stripe_count;
}
diff --git a/src/test/encoding/types.h b/src/test/encoding/types.h
index 9ff7010a1d8..b69bb9fd07c 100644
--- a/src/test/encoding/types.h
+++ b/src/test/encoding/types.h
@@ -100,7 +100,6 @@ TYPE(snaplink_t)
TYPE(sr_t)
#include "mds/mdstypes.h"
-TYPE(file_layout_policy_t)
TYPE(frag_info_t)
TYPE(nest_info_t)
TYPE(client_writeable_range_t)