tomove.push_back(bound);
}
}
- for (list<CDir*>::iterator p = tomove.begin(); p != tomove.end(); ++p) {
- CDir *bound = *p;
+ for (const auto& bound : tomove) {
dout(10) << "moving bound " << *bound << " from " << *oldparent << " to " << *newparent << dendl;
subtrees[oldparent].erase(bound);
subtrees[newparent].insert(bound);
ceph_assert(parent->is_auth());
blob->add_dir_context(parent);
blob->add_dir(parent, true);
- for (list<CInode*>::iterator p = lsi.begin();
- p != lsi.end();
- ++p) {
- CInode *cur = *p;
- journal_dirty_inode(mut.get(), blob, cur);
+ for (const auto& in : lsi) {
+ journal_dirty_inode(mut.get(), blob, in);
}
}
}
// apply projected renames
- for (map<CInode*,list<pair<CDir*,CDir*> > >::iterator p = projected_subtree_renames.begin();
- p != projected_subtree_renames.end();
- ++p) {
- for (list<pair<CDir*,CDir*> >::iterator q = p->second.begin(); q != p->second.end(); ++q) {
- CInode *diri = p->first;
- CDir *olddir = q->first;
- CDir *newdir = q->second;
+ for (const auto& [diri, renames] : projected_subtree_renames) {
+ for (const auto& [olddir, newdir] : renames) {
dout(10) << " adjusting for projected rename of " << *diri << " to " << *newdir << dendl;
list<CDir*> dfls;
diri->get_dirfrags(dfls);
- for (list<CDir*>::iterator p = dfls.begin(); p != dfls.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : dfls) {
dout(10) << "dirfrag " << dir->dirfrag() << " " << *dir << dendl;
CDir *oldparent = get_projected_subtree_root(olddir);
dout(10) << " old parent " << oldparent->dirfrag() << " " << *oldparent << dendl;
// recurse?
list<CDir*> ls;
dnl->get_inode()->get_dirfrags(ls);
- for (list<CDir*>::iterator p = ls.begin();
- p != ls.end();
- ++p) {
- CDir *subdir = *p;
+ for (const auto& subdir : ls) {
if (!subdir->is_subtree_root())
q.push_back(subdir);
}
uncommitted_slave_rename_olddir.erase(it);
list<CDir*> ls;
diri->get_dirfrags(ls);
- for (list<CDir*>::iterator q = ls.begin(); q != ls.end(); ++q) {
- CDir *root = get_subtree_root(*q);
+ for (const auto& dir : ls) {
+ CDir *root = get_subtree_root(dir);
if (root->get_dir_auth() == CDIR_AUTH_UNDEF) {
try_trim_non_auth_subtree(root);
- if (*q != root)
+ if (dir != root)
break;
}
}
q.push_back(in);
}
}
- for (list<CInode*>::iterator p = q.begin(); p != q.end(); ++p)
- remove_inode_recursive(*p);
+ for (auto& in : q) {
+ remove_inode_recursive(in);
+ }
}
/** recalc_auth_bits()
}
// recurse into nested dirs
- for (list<CDir*>::iterator p = nested.begin();
- p != nested.end();
- ++p)
- rejoin_walk(*p, rejoin);
+ for (const auto& dir : nested) {
+ rejoin_walk(dir, rejoin);
+ }
}
list<CDir*> dfs;
in->get_dirfrags(dfs);
- for (list<CDir*>::iterator p = dfs.begin();
- p != dfs.end();
- ++p) {
- CDir *dir = *p;
+ for (const auto& dir : dfs) {
if (!dir->is_auth())
continue;
}
}
- for (set<CInode*>::iterator p = refragged_inodes.begin();
- p != refragged_inodes.end();
- ++p) {
+ for (const auto& in : refragged_inodes) {
list<CDir*> ls;
- (*p)->get_nested_dirfrags(ls);
- for (list<CDir*>::iterator q = ls.begin(); q != ls.end(); ++q) {
- if ((*q)->is_auth() || ack->strong_dirfrags.count((*q)->dirfrag()))
+ in->get_nested_dirfrags(ls);
+ for (const auto& dir : ls) {
+ if (dir->is_auth() || ack->strong_dirfrags.count(dir->dirfrag()))
continue;
- ceph_assert((*q)->get_num_any() == 0);
- (*p)->close_dirfrag((*q)->get_frag());
+ ceph_assert(dir->get_num_any() == 0);
+ in->close_dirfrag(dir->get_frag());
}
}
if (in->is_dir()) {
list<CDir*> dfls;
in->get_dirfrags(dfls);
- for (list<CDir*>::iterator p = dfls.begin();
- p != dfls.end();
- ++p) {
- CDir *dir = *p;
+ for (const auto& dir : dfls) {
dir->clear_replica_map();
for (auto &p : dir->items) {
in->force_dirfrags();
list<CDir*> ls;
in->get_dirfrags(ls);
- for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p)
- rejoin_undef_dirfrags.insert(*p);
+ for (const auto& dir : ls) {
+ rejoin_undef_dirfrags.insert(dir);
+ }
}
}
}
if (mds->is_stopping() && root) {
list<CDir*> ls;
root->get_dirfrags(ls);
- for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : ls) {
if (dir->get_num_ref() == 1) { // subtree pin
trim_dirfrag(dir, 0, expiremap);
++trimmed;
// DIR
list<CDir*> dfls;
in->get_dirfrags(dfls);
- for (list<CDir*>::iterator p = dfls.begin(); p != dfls.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : dfls) {
ceph_assert(!dir->is_subtree_root());
trim_dirfrag(dir, con ? con:dir, expiremap); // if no container (e.g. root dirfrag), use *p
}
dout(10) << " removing " << *in << dendl;
list<CDir*> ls;
in->get_dirfrags(ls);
- for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p) {
- CDir *subdir = *p;
+ for (const auto& subdir : ls) {
ceph_assert(!subdir->is_subtree_root());
in->close_dirfrag(subdir->dirfrag().frag);
}
}
}
- for (auto dn : auth_list) {
+ for (const auto& dn : auth_list) {
if (dn->state_test(CDentry::STATE_BOTTOMLRU))
bottom_lru.lru_insert_mid(dn);
else
if (!in->is_auth()) {
list<CDir*> ls;
in->get_dirfrags(ls);
- for (list<CDir*>::iterator p = ls.begin();
- p != ls.end();
- ++p) {
- dout(10) << " removing " << **p << dendl;
- ceph_assert((*p)->get_num_ref() == 1); // SUBTREE
- remove_subtree((*p));
- in->close_dirfrag((*p)->dirfrag().frag);
+ for (const auto& dir : ls) {
+ dout(10) << " removing " << *dir << dendl;
+ ceph_assert(dir->get_num_ref() == 1); // SUBTREE
+ remove_subtree(dir);
+ in->close_dirfrag(dir->dirfrag().frag);
}
dout(10) << " removing " << *in << dendl;
ceph_assert(!in->get_parent_dn());
if (in->is_dir()) {
list<CDir*> subdirs;
in->get_dirfrags(subdirs);
- for (list<CDir*>::iterator subdir = subdirs.begin();
- subdir != subdirs.end();
- ++subdir) {
- if ((*subdir)->is_subtree_root()) {
+ for (const auto& subdir : subdirs) {
+ if (subdir->is_subtree_root()) {
keep_inode = true;
- dout(10) << "trim_non_auth_subtree(" << dir << ") keeping " << **subdir << dendl;
+ dout(10) << "trim_non_auth_subtree(" << dir << ") keeping " << *subdir << dendl;
} else {
- if (trim_non_auth_subtree(*subdir))
+ if (trim_non_auth_subtree(subdir))
keep_inode = true;
else {
- in->close_dirfrag((*subdir)->get_frag());
+ in->close_dirfrag(subdir->get_frag());
dir->state_clear(CDir::STATE_COMPLETE); // now incomplete!
}
}
diri->get_nested_dirfrags(ls);
dout(7) << " dir expire on dirfrag " << q.first << " from mds." << from
<< " while rejoining, inode isn't replicated" << dendl;
- for (list<CDir*>::iterator q = ls.begin(); q != ls.end(); ++q) {
- dir = *q;
+ for (const auto& d : ls) {
+ dir = d;
if (dir->is_replica(from)) {
dout(7) << " dir expire on " << *dir << " from mds." << from << dendl;
dir->remove_replica(from);
}
migrator->clear_export_queue();
- for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : ls) {
mds_rank_t dest = dir->get_inode()->authority().first;
if (dest > 0 && !mds->mdsmap->is_active(dest))
dest = 0;
strays[i]->get_dirfrags(ls);
}
- for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : ls) {
if (dir->dirfrag() < next)
continue;
if (!dir->is_complete()) {
// did i change the subtree map?
if (dir->is_subtree_root()) {
// new frags are now separate subtrees
- for (list<CDir*>::iterator p = resultfrags.begin();
- p != resultfrags.end();
- ++p)
- subtrees[*p].clear(); // new frag is now its own subtree
+ for (const auto& dir : resultfrags) {
+ subtrees[dir].clear(); // new frag is now its own subtree
+ }
// was i a bound?
if (parent_subtree) {
ceph_assert(subtrees[parent_subtree].count(dir));
subtrees[parent_subtree].erase(dir);
- for (list<CDir*>::iterator p = resultfrags.begin();
- p != resultfrags.end();
- ++p) {
- ceph_assert((*p)->is_subtree_root());
- subtrees[parent_subtree].insert(*p);
+ for (const auto& dir : resultfrags) {
+ ceph_assert(dir->is_subtree_root());
+ subtrees[parent_subtree].insert(dir);
}
}
return false;
}
- for (list<CDir*>::iterator p = dirs.begin(); p != dirs.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : dirs) {
if (dir->state_test(CDir::STATE_FRAGMENTING)) {
dout(7) << "can_fragment: already fragmenting " << *dir << dendl;
return false;
MDSGatherBuilder gather(g_ceph_context);
- for (list<CDir*>::iterator p = info.dirs.begin();
- p != info.dirs.end();
- ++p) {
- CDir *dir = *p;
-
+ for (const auto& dir : info.dirs) {
bool ready = true;
if (!dir->is_complete()) {
dout(15) << " fetching incomplete " << *dir << dendl;
return;
}
- for (list<CDir*>::iterator p = info.dirs.begin();
- p != info.dirs.end();
- ++p) {
- CDir *dir = *p;
+ for (const auto& dir : info.dirs) {
if (!dir->is_frozen_dir()) {
ceph_assert(dir->is_freezing_dir());
dir->add_waiter(CDir::WAIT_FROZEN, gather.new_sub());
void MDCache::fragment_unmark_unfreeze_dirs(list<CDir*>& dirs)
{
dout(10) << "fragment_unmark_unfreeze_dirs " << dirs << dendl;
- for (list<CDir*>::iterator p = dirs.begin(); p != dirs.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : dirs) {
dout(10) << " frag " << *dir << dendl;
ceph_assert(dir->state_test(CDir::STATE_FRAGMENTING));
continue;
CDir *dir;
int total_auth_pins = 0;
- for (list<CDir*>::iterator q = info.dirs.begin();
- q != info.dirs.end();
- ++q) {
- dir = *q;
+ for (const auto& d : info.dirs) {
+ dir = d;
if (!dir->state_test(CDir::STATE_DNPINNEDFRAG)) {
total_auth_pins = -1;
break;
EFragment *le = new EFragment(mds->mdlog, EFragment::OP_PREPARE, basedirfrag, info.bits);
mds->mdlog->start_entry(le);
- for (list<CDir*>::iterator p = info.dirs.begin(); p != info.dirs.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : info.dirs) {
dirfrag_rollback rollback;
rollback.fnode = dir->fnode;
le->add_orig_frag(dir->get_frag(), &rollback);
ceph_assert(!diri->dirfragtree.is_leaf(fg));
le->metablob.add_dir_context(*info.resultfrags.begin());
- for (list<CDir*>::iterator p = info.resultfrags.begin();
- p != info.resultfrags.end();
- ++p) {
+ for (const auto& dir : info.resultfrags) {
if (diri->is_auth()) {
- le->metablob.add_fragmented_dir(*p, false, false);
+ le->metablob.add_fragmented_dir(dir, false, false);
} else {
- (*p)->state_set(CDir::STATE_DIRTYDFT);
- le->metablob.add_fragmented_dir(*p, false, true);
+ dir->state_set(CDir::STATE_DIRTYDFT);
+ le->metablob.add_fragmented_dir(dir, false, true);
}
}
// store resulting frags
MDSGatherBuilder gather(g_ceph_context, new C_MDC_FragmentStore(this, mdr));
- for (list<CDir*>::iterator p = info.resultfrags.begin();
- p != info.resultfrags.end();
- ++p) {
- CDir *dir = *p;
+ for (const auto& dir : info.resultfrags) {
dout(10) << " storing result frag " << *dir << dendl;
// freeze and store them too
}
// freshly replicate new dirs to peers
- for (list<CDir*>::iterator q = info.resultfrags.begin();
- q != info.resultfrags.end();
- ++q)
- replicate_dir(*q, p.first, notify->basebl);
+ for (const auto& dir : info.resultfrags) {
+ replicate_dir(dir, p.first, notify->basebl);
+ }
mds->send_message_mds(notify, p.first);
}
// unfreeze resulting frags
- for (list<CDir*>::iterator p = info.resultfrags.begin();
- p != info.resultfrags.end();
- ++p) {
- CDir *dir = *p;
+ for (const auto& dir : info.resultfrags) {
dout(10) << " result frag " << *dir << dendl;
for (auto &p : dir->items) {
if (g_conf()->mds_debug_frag)
diri->verify_dirfrags();
- for (list<CDir*>::iterator p = resultfrags.begin(); p != resultfrags.end(); ++p)
- diri->take_dir_waiting((*p)->get_frag(), waiters);
+ for (const auto& dir : resultfrags) {
+ diri->take_dir_waiting(dir->get_frag(), waiters);
+ }
// add new replica dirs values
auto p = notify->basebl.cbegin();
set<CDir*> seen;
// calc max depth
- for (list<CDir*>::iterator p = basefrags.begin(); p != basefrags.end(); ++p)
- q.push_back(pair<CDir*,int>(*p, 0));
+ for (const auto& dir : basefrags) {
+ q.emplace_back(dir, 0);
+ }
set<CDir*> subtrees_seen;
// print tree
- for (list<CDir*>::iterator p = basefrags.begin(); p != basefrags.end(); ++p)
- q.push_back(pair<CDir*,int>(*p, 0));
+ for (const auto& dir : basefrags) {
+ q.emplace_back(dir, 0);
+ }
while (!q.empty()) {
CDir *dir = q.front().first;
// dirfrags?
list<CDir*> dfs;
in->get_dirfrags(dfs);
- for (list<CDir*>::iterator p = dfs.begin(); p != dfs.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : dfs) {
dout(7) << " dirfrag " << *dir << dendl;
for (auto &p : dir->items) {
<< " new " << new_uid << ":" << new_gid
<< " cap: " << *this << dendl;
- for (std::vector<MDSCapGrant>::const_iterator i = grants.begin();
- i != grants.end();
- ++i) {
- if (i->network.size() &&
- (!i->network_valid ||
- !network_contains(i->network_parsed,
- i->network_prefix,
+ for (const auto& grant : grants) {
+ if (grant.network.size() &&
+ (!grant.network_valid ||
+ !network_contains(grant.network_parsed,
+ grant.network_prefix,
addr))) {
continue;
}
- if (i->match.match(inode_path, caller_uid, caller_gid, caller_gid_list) &&
- i->spec.allows(mask & (MAY_READ|MAY_EXECUTE), mask & MAY_WRITE)) {
+ if (grant.match.match(inode_path, caller_uid, caller_gid, caller_gid_list) &&
+ grant.spec.allows(mask & (MAY_READ|MAY_EXECUTE), mask & MAY_WRITE)) {
// we have a match; narrow down GIDs to those specifically allowed here
vector<uint64_t> gids;
- if (std::find(i->match.gids.begin(), i->match.gids.end(), caller_gid) !=
- i->match.gids.end()) {
+ if (std::find(grant.match.gids.begin(), grant.match.gids.end(), caller_gid) !=
+ grant.match.gids.end()) {
gids.push_back(caller_gid);
}
if (caller_gid_list) {
- std::set_intersection(i->match.gids.begin(), i->match.gids.end(),
+ std::set_intersection(grant.match.gids.begin(), grant.match.gids.end(),
caller_gid_list->begin(), caller_gid_list->end(),
std::back_inserter(gids));
std::sort(gids.begin(), gids.end());
// Spec is non-allowing if caller asked for set pool but spec forbids it
if (mask & MAY_SET_VXATTR) {
- if (!i->spec.allow_set_vxattr()) {
+ if (!grant.spec.allow_set_vxattr()) {
continue;
}
}
if (mask & MAY_SNAPSHOT) {
- if (!i->spec.allow_snapshot()) {
+ if (!grant.spec.allow_snapshot()) {
continue;
}
}
// check unix permissions?
- if (i->match.uid == MDSCapMatch::MDS_AUTH_UID_ANY) {
+ if (grant.match.uid == MDSCapMatch::MDS_AUTH_UID_ANY) {
return true;
}
bool MDSAuthCaps::allow_all() const
{
- for (std::vector<MDSCapGrant>::const_iterator i = grants.begin(); i != grants.end(); ++i) {
- if (i->match.is_match_all() && i->spec.allow_all()) {
+ for (const auto& grant : grants) {
+ if (grant.match.is_match_all() && grant.spec.allow_all()) {
return true;
}
}
out << "uid=" << match.uid;
if (!match.gids.empty()) {
out << " gids=";
- for (std::vector<gid_t>::const_iterator p = match.gids.begin();
- p != match.gids.end();
- ++p) {
- if (p != match.gids.begin())
+ bool first = true;
+ for (const auto& gid : match.gids) {
+ if (!first)
out << ',';
- out << *p;
+ out << gid;
+ first = false;
}
}
}
// can we auth pin them?
if (!fail) {
- for (list<MDSCacheObject*>::iterator p = objects.begin();
- p != objects.end();
- ++p) {
- if (!(*p)->is_auth()) {
- dout(10) << " not auth for " << **p << dendl;
+ for (const auto& obj : objects) {
+ if (!obj->is_auth()) {
+ dout(10) << " not auth for " << *obj << dendl;
fail = true;
break;
}
- if (mdr->is_auth_pinned(*p))
+ if (mdr->is_auth_pinned(obj))
continue;
- if (!mdr->can_auth_pin(*p)) {
+ if (!mdr->can_auth_pin(obj)) {
if (mdr->slave_request->is_nonblock()) {
- dout(10) << " can't auth_pin (freezing?) " << **p << " nonblocking" << dendl;
+ dout(10) << " can't auth_pin (freezing?) " << *obj << " nonblocking" << dendl;
fail = true;
wouldblock = true;
break;
}
// wait
- dout(10) << " waiting for authpinnable on " << **p << dendl;
- (*p)->add_waiter(CDir::WAIT_UNFREEZE, new C_MDS_RetryRequest(mdcache, mdr));
+ dout(10) << " waiting for authpinnable on " << *obj << dendl;
+ obj->add_waiter(CDir::WAIT_UNFREEZE, new C_MDS_RetryRequest(mdcache, mdr));
mdr->drop_local_auth_pins();
- mds->locker->notify_freeze_waiter(*p);
+ mds->locker->notify_freeze_waiter(obj);
return;
}
}
return;
}
}
- for (list<MDSCacheObject*>::iterator p = objects.begin();
- p != objects.end();
- ++p) {
- dout(10) << "auth_pinning " << **p << dendl;
- mdr->auth_pin(*p);
+ for (const auto& obj : objects) {
+ dout(10) << "auth_pinning " << *obj << dendl;
+ mdr->auth_pin(obj);
}
}
list<CDir*> ls;
in->get_dirfrags(ls);
- for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : ls) {
// is the frag obviously non-empty?
if (dir->is_auth()) {
if (dir->get_projected_fnode()->fragstat.size()) {
list<CDir*> ls;
in->get_dirfrags(ls);
- for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : ls) {
const fnode_t *pf = dir->get_projected_fnode();
if (pf->fragstat.size()) {
dout(10) << "dir_is_nonempty dirstat has "
if (srci->is_dir()) {
list<CDir*> ls;
srci->get_dirfrags(ls);
- for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : ls) {
if (!dir->is_auth())
metablob->renamed_dir_frags.push_back(dir->get_frag());
}
// journal new subtrees root dirfrags
list<CDir*> ls;
srci->get_dirfrags(ls);
- for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : ls) {
if (dir->is_auth())
metablob->add_dir(dir, true);
}
list<CDir*> bounds;
if (srcdnl->get_inode()->is_dir()) {
srcdnl->get_inode()->get_dirfrags(bounds);
- for (list<CDir*>::iterator p = bounds.begin(); p != bounds.end(); ++p)
- (*p)->state_set(CDir::STATE_EXPORTBOUND);
+ for (const auto& bound : bounds) {
+ bound->state_set(CDir::STATE_EXPORTBOUND);
+ }
}
map<client_t,entity_inst_t> exported_client_map;
exported_client_map,
exported_client_metadata_map);
- for (list<CDir*>::iterator p = bounds.begin(); p != bounds.end(); ++p)
- (*p)->state_clear(CDir::STATE_EXPORTBOUND);
+ for (const auto& bound : bounds) {
+ bound->state_clear(CDir::STATE_EXPORTBOUND);
+ }
encode(exported_client_map, reply->inode_export, mds->mdsmap->get_up_features());
encode(exported_client_metadata_map, reply->inode_export);
if (srcdn->authority().first == whoami) {
list<CDir*> ls;
in->get_dirfrags(ls);
- for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p) {
- CDir *dir = *p;
+ for (const auto& dir : ls) {
if (!dir->is_auth())
le->commit.renamed_dir_frags.push_back(dir->get_frag());
}