void add_waiter(uint64_t tag, Context *c);
- static const int EXPORT_NONCE = 1;
+ static const unsigned EXPORT_NONCE = 1;
bool is_lt(const MDSCacheObject *r) const {
return *this < *static_cast<const CDentry*>(r);
steal_dentry(dir->items.begin()->second);
// merge replica map
- for (map<int,int>::iterator p = dir->replica_map.begin();
+ for (map<int,unsigned>::iterator p = dir->replicas_begin();
p != dir->replica_map.end();
++p) {
- int cur = replica_map[p->first];
+ unsigned cur = replica_map[p->first];
if (p->second > cur)
replica_map[p->first] = p->second;
}
static const int REP_LIST = 2;
- static const int NONCE_EXPORT = 1;
+ static const unsigned EXPORT_NONCE = 1;
// -- wait masks --
// for giving to clients
void get_dist_spec(set<int>& ls, int auth) {
if (is_rep()) {
- for (map<int,int>::iterator p = replicas_begin();
+ for (map<int,unsigned>::iterator p = replicas_begin();
p != replicas_end();
++p)
ls.insert(p->first);
static const uint64_t WAIT_ANY_MASK = (uint64_t)(-1);
// misc
- static const int EXPORT_NONCE = 1; // nonce given to replicas created by export
+ static const unsigned EXPORT_NONCE = 1; // nonce given to replicas created by export
ostream& print_db_line_prefix(ostream& out);
void Locker::send_lock_message(SimpleLock *lock, int msg)
{
- for (map<int,int>::iterator it = lock->get_parent()->replicas_begin();
+ for (map<int,unsigned>::iterator it = lock->get_parent()->replicas_begin();
it != lock->get_parent()->replicas_end();
++it) {
if (mds->mdsmap->get_state(it->first) < MDSMap::STATE_REJOIN)
void Locker::send_lock_message(SimpleLock *lock, int msg, const bufferlist &data)
{
- for (map<int,int>::iterator it = lock->get_parent()->replicas_begin();
+ for (map<int,unsigned>::iterator it = lock->get_parent()->replicas_begin();
it != lock->get_parent()->replicas_end();
++it) {
if (mds->mdsmap->get_state(it->first) < MDSMap::STATE_REJOIN)
dout(10) << " already have " << p->frag << " -> " << fg << " " << *dir << dendl;
} else {
dirs_to_share.insert(dir);
- int nonce = dir->add_replica(from);
+ unsigned nonce = dir->add_replica(from);
dout(10) << " have " << p->frag << " -> " << fg << " " << *dir << dendl;
if (ack)
ack->add_strong_dirfrag(dir->dirfrag(), nonce, dir->dir_rep);
if (survivor && dn->is_replica(from))
dentry_remove_replica(dn, from, gather_locks);
- int dnonce = dn->add_replica(from);
+ unsigned dnonce = dn->add_replica(from);
dout(10) << " have " << *dn << dendl;
if (ack)
ack->add_strong_dentry(dir->dirfrag(), dn->name, dn->first, dn->last,
if (survivor && in->is_replica(from))
inode_remove_replica(in, from, gather_locks);
- int inonce = in->add_replica(from);
+ unsigned inonce = in->add_replica(from);
dout(10) << " have " << *in << dendl;
// scatter the dirlock, just in case?
assert(in); // hmm fixme wrt stray?
if (survivor && in->is_replica(from))
inode_remove_replica(in, from, gather_locks);
- int inonce = in->add_replica(from);
+ unsigned inonce = in->add_replica(from);
dout(10) << " have base " << *in << dendl;
if (ack) {
dq.pop_front();
// dir
- for (map<int,int>::iterator r = dir->replicas_begin();
+ for (map<int,unsigned>::iterator r = dir->replicas_begin();
r != dir->replicas_end();
++r) {
ack[r->first]->add_strong_dirfrag(dir->dirfrag(), ++r->second, dir->dir_rep);
in = dnl->get_inode();
// dentry
- for (map<int,int>::iterator r = dn->replicas_begin();
+ for (map<int,unsigned>::iterator r = dn->replicas_begin();
r != dn->replicas_end();
++r) {
ack[r->first]->add_strong_dentry(dir->dirfrag(), dn->name, dn->first, dn->last,
if (!in)
continue;
- for (map<int,int>::iterator r = in->replicas_begin();
+ for (map<int,unsigned>::iterator r = in->replicas_begin();
r != in->replicas_end();
++r) {
ack[r->first]->add_inode_base(in);
// base inodes too
if (root && root->is_auth())
- for (map<int,int>::iterator r = root->replicas_begin();
+ for (map<int,unsigned>::iterator r = root->replicas_begin();
r != root->replicas_end();
++r) {
ack[r->first]->add_inode_base(root);
ack[r->first]->add_inode_locks(root, ++r->second);
}
if (myin)
- for (map<int,int>::iterator r = myin->replicas_begin();
+ for (map<int,unsigned>::iterator r = myin->replicas_begin();
r != myin->replicas_end();
++r) {
ack[r->first]->add_inode_base(myin);
p != rejoin_potential_updated_scatterlocks.end();
++p) {
CInode *in = *p;
- for (map<int,int>::iterator r = in->replicas_begin();
+ for (map<int,unsigned>::iterator r = in->replicas_begin();
r != in->replicas_end();
++r)
ack[r->first]->add_inode_base(in);
}
// INODES
- for (map<vinodeno_t,int>::iterator it = p->second.inodes.begin();
+ for (map<vinodeno_t,uint32_t>::iterator it = p->second.inodes.begin();
it != p->second.inodes.end();
++it) {
CInode *in = get_inode(it->first);
- int nonce = it->second;
+ unsigned nonce = it->second;
if (!in) {
dout(0) << " inode expire on " << it->first << " from " << from
}
// DIRS
- for (map<dirfrag_t,int>::iterator it = p->second.dirs.begin();
+ for (map<dirfrag_t,uint32_t>::iterator it = p->second.dirs.begin();
it != p->second.dirs.end();
++it) {
CDir *dir = get_dirfrag(it->first);
- int nonce = it->second;
+ unsigned nonce = it->second;
if (!dir) {
dout(0) << " dir expire on " << it->first << " from " << from
}
// DENTRIES
- for (map<dirfrag_t, map<pair<string,snapid_t>,int> >::iterator pd = p->second.dentries.begin();
+ for (map<dirfrag_t, map<pair<string,snapid_t>,uint32_t> >::iterator pd = p->second.dentries.begin();
pd != p->second.dentries.end();
++pd) {
dout(10) << " dn expires in dir " << pd->first << dendl;
assert(dir->is_auth());
}
- for (map<pair<string,snapid_t>,int>::iterator p = pd->second.begin();
+ for (map<pair<string,snapid_t>,uint32_t>::iterator p = pd->second.begin();
p != pd->second.end();
++p) {
- int nonce = p->second;
+ unsigned nonce = p->second;
CDentry *dn;
if (dir) {
if (bcast) {
mds->get_mds_map()->get_active_mds_set(who);
} else {
- for (map<int,int>::iterator p = dir->replicas_begin();
+ for (map<int,unsigned>::iterator p = dir->replicas_begin();
p != dir->replicas_end();
++p)
who.insert(p->first);
dout(7) << "send_dentry_link " << *dn << dendl;
CDir *subtree = get_subtree_root(dn->get_dir());
- for (map<int,int>::iterator p = dn->replicas_begin();
+ for (map<int,unsigned>::iterator p = dn->replicas_begin();
p != dn->replicas_end();
++p) {
if (mds->mdsmap->get_state(p->first) < MDSMap::STATE_REJOIN ||
{
dout(10) << "send_dentry_unlink " << *dn << dendl;
// share unlink news with replicas
- for (map<int,int>::iterator it = dn->replicas_begin();
+ for (map<int,unsigned>::iterator it = dn->replicas_begin();
it != dn->replicas_end();
++it) {
// don't tell (rmdir) witnesses; they already know
// tell peers
CDir *first = *info.resultfrags.begin();
- for (map<int,int>::iterator p = first->replica_map.begin();
+ for (map<int,unsigned>::iterator p = first->replicas_begin();
p != first->replica_map.end();
++p) {
if (mds->mdsmap->get_state(p->first) <= MDSMap::STATE_REJOIN)
MExportDirPrep *prep = new MExportDirPrep(dir->dirfrag(), it->second.tid);
// include list of bystanders
- for (map<int,int>::iterator p = dir->replicas_begin();
+ for (map<int,unsigned>::iterator p = dir->replicas_begin();
p != dir->replicas_end();
++p) {
if (p->first != it->second.peer) {
assert(it->second.warning_ack_waiting.empty());
assert(it->second.notify_ack_waiting.empty());
- for (map<int,int>::iterator p = dir->replicas_begin();
+ for (map<int,unsigned>::iterator p = dir->replicas_begin();
p != dir->replicas_end();
++p) {
if (p->first == it->second.peer) continue;
assert(dir->is_auth());
dir->state_clear(CDir::STATE_AUTH);
dir->remove_bloom();
- dir->replica_nonce = CDir::NONCE_EXPORT;
+ dir->replica_nonce = CDir::EXPORT_NONCE;
if (dir->is_dirty())
dir->mark_clean();
}
void init_gather() {
- for (map<int,int>::const_iterator p = parent->replicas_begin();
+ for (map<int,unsigned>::const_iterator p = parent->replicas_begin();
p != parent->replicas_end();
++p)
more()->gather_set.insert(p->first);
// --------------------------------------------
// replication (across mds cluster)
protected:
- __s16 replica_nonce; // [replica] defined on replica
- map<int,int> replica_map; // [auth] mds -> nonce
+ unsigned replica_nonce; // [replica] defined on replica
+ map<int,unsigned> replica_map; // [auth] mds -> nonce
public:
bool is_replicated() { return !replica_map.empty(); }
bool is_replica(int mds) { return replica_map.count(mds); }
int num_replicas() { return replica_map.size(); }
- int add_replica(int mds) {
+ unsigned add_replica(int mds) {
if (replica_map.count(mds))
return ++replica_map[mds]; // inc nonce
if (replica_map.empty())
get(PIN_REPLICATED);
return replica_map[mds] = 1;
}
- void add_replica(int mds, int nonce) {
+ void add_replica(int mds, unsigned nonce) {
if (replica_map.empty())
get(PIN_REPLICATED);
replica_map[mds] = nonce;
}
- int get_replica_nonce(int mds) {
+ unsigned get_replica_nonce(int mds) {
assert(replica_map.count(mds));
return replica_map[mds];
}
put(PIN_REPLICATED);
replica_map.clear();
}
- map<int,int>::iterator replicas_begin() { return replica_map.begin(); }
- map<int,int>::iterator replicas_end() { return replica_map.end(); }
- const map<int,int>& get_replicas() { return replica_map; }
+ map<int,unsigned>::iterator replicas_begin() { return replica_map.begin(); }
+ map<int,unsigned>::iterator replicas_end() { return replica_map.end(); }
+ const map<int,unsigned>& get_replicas() { return replica_map; }
void list_replicas(set<int>& ls) {
- for (map<int,int>::const_iterator p = replica_map.begin();
+ for (map<int,unsigned>::const_iterator p = replica_map.begin();
p != replica_map.end();
++p)
ls.insert(p->first);
}
- int get_replica_nonce() { return replica_nonce;}
- void set_replica_nonce(int n) { replica_nonce = n; }
+ unsigned get_replica_nonce() { return replica_nonce; }
+ void set_replica_nonce(unsigned n) { replica_nonce = n; }
// ---------------------------------------------
that makes it less work to process when exports are in progress.
*/
struct realm {
- map<vinodeno_t, __s32> inodes;
- map<dirfrag_t, __s32> dirs;
- map<dirfrag_t, map<pair<string,snapid_t>,__s32> > dentries;
+ map<vinodeno_t, uint32_t> inodes;
+ map<dirfrag_t, uint32_t> dirs;
+ map<dirfrag_t, map<pair<string,snapid_t>,uint32_t> > dentries;
void encode(bufferlist &bl) const {
::encode(inodes, bl);
public:
virtual const char *get_type_name() const { return "cache_expire";}
- void add_inode(dirfrag_t r, vinodeno_t vino, int nonce) {
+ void add_inode(dirfrag_t r, vinodeno_t vino, unsigned nonce) {
realms[r].inodes[vino] = nonce;
}
- void add_dir(dirfrag_t r, dirfrag_t df, int nonce) {
+ void add_dir(dirfrag_t r, dirfrag_t df, unsigned nonce) {
realms[r].dirs[df] = nonce;
}
- void add_dentry(dirfrag_t r, dirfrag_t df, const string& dn, snapid_t last, int nonce) {
+ void add_dentry(dirfrag_t r, dirfrag_t df, const string& dn, snapid_t last, unsigned nonce) {
realms[r].dentries[df][pair<string,snapid_t>(dn,last)] = nonce;
}
// -- types --
struct inode_strong {
- int32_t nonce;
+ uint32_t nonce;
int32_t caps_wanted;
int32_t filelock, nestlock, dftlock;
inode_strong() {}
WRITE_CLASS_ENCODER(inode_strong)
struct dirfrag_strong {
- int32_t nonce;
+ uint32_t nonce;
int8_t dir_rep;
dirfrag_strong() {}
dirfrag_strong(int n, int dr) : nonce(n), dir_rep(dr) {}
inodeno_t ino;
inodeno_t remote_ino;
unsigned char remote_d_type;
- int32_t nonce;
+ uint32_t nonce;
int32_t lock;
dn_strong() :
ino(0), remote_ino(0), remote_d_type(0), nonce(0), lock(0) {}