mirror of
https://github.com/ceph/ceph
synced 2025-02-23 02:57:21 +00:00
Merge branch 'testing' into unstable
Conflicts: configure.ac src/mds/MDCache.cc
This commit is contained in:
commit
90dd3c3e89
19
debian/changelog
vendored
19
debian/changelog
vendored
@ -1,3 +1,22 @@
|
||||
ceph (0.21.2-1) unstable; urgency=low
|
||||
|
||||
* osd: less log noise
|
||||
* osd: mark down old heartbeat peers
|
||||
* filejournal: clean up init sequence, fewer confusing errors on startup
|
||||
* msgr: fix throttler leak when closing connections (fixes deadlock)
|
||||
* osdmaptool: don't crash on corrupt input
|
||||
* crush: error out instead of crashing on ambiguous hierarchy
|
||||
* mds: error to client on invalid op
|
||||
* mds: fix ENOTEMPTY checks on rmdir
|
||||
* osd: fix race between reads and cloned objects
|
||||
* auth: fix keyring load search when $HOME not defined
|
||||
* client: fix xattr cap writeback
|
||||
* client: fix snap vs metadata writeback
|
||||
* osd: fix journal, btrfs throttling
|
||||
* msgr: fix memory leak on closed connections
|
||||
|
||||
-- Sage Weil <sage@newdream.net> Thu, 26 Aug 2010 15:22:42 -0700
|
||||
|
||||
ceph (0.21.1-1) unstable; urgency=high
|
||||
|
||||
* ceph.spec: many fixes
|
||||
|
@ -701,7 +701,12 @@ public:
|
||||
lock->set_state(LOCK_EXCL);
|
||||
else if (issued & CEPH_CAP_GWR)
|
||||
lock->set_state(LOCK_MIX);
|
||||
else
|
||||
else if (lock->is_dirty()) {
|
||||
if (is_replicated())
|
||||
lock->set_state(LOCK_MIX);
|
||||
else
|
||||
lock->set_state(LOCK_LOCK);
|
||||
} else
|
||||
lock->set_state(LOCK_SYNC);
|
||||
} else {
|
||||
if (lock->is_xlocked())
|
||||
@ -716,6 +721,8 @@ public:
|
||||
choose_ideal_loner() >= 0)
|
||||
try_set_loner();
|
||||
choose_lock_state(&filelock, issued);
|
||||
choose_lock_state(&nestlock, issued);
|
||||
choose_lock_state(&dirfragtreelock, issued);
|
||||
choose_lock_state(&authlock, issued);
|
||||
choose_lock_state(&xattrlock, issued);
|
||||
choose_lock_state(&linklock, issued);
|
||||
|
@ -3935,7 +3935,7 @@ void MDCache::rejoin_gather_finish()
|
||||
}
|
||||
|
||||
process_imported_caps();
|
||||
process_reconnected_caps();
|
||||
choose_lock_states_and_reconnect_caps();
|
||||
|
||||
vector<CInode*> recover_q, check_q;
|
||||
identify_files_to_recover(rejoin_recover_q, rejoin_check_q);
|
||||
@ -4005,18 +4005,17 @@ void MDCache::check_realm_past_parents(SnapRealm *realm)
|
||||
/*
|
||||
* choose lock states based on reconnected caps
|
||||
*/
|
||||
void MDCache::process_reconnected_caps()
|
||||
void MDCache::choose_lock_states_and_reconnect_caps()
|
||||
{
|
||||
dout(10) << "process_reconnected_caps" << dendl;
|
||||
dout(10) << "choose_lock_states_and_reconnect_caps" << dendl;
|
||||
|
||||
map<client_t,MClientSnap*> splits;
|
||||
|
||||
// adjust lock states appropriately
|
||||
for (map<CInode*,map<client_t,inodeno_t> >::iterator p = reconnected_caps.begin();
|
||||
p != reconnected_caps.end();
|
||||
p++) {
|
||||
CInode *in = p->first;
|
||||
|
||||
for (hash_map<vinodeno_t,CInode*>::iterator i = inode_map.begin();
|
||||
i != inode_map.end();
|
||||
++i) {
|
||||
CInode *in = i->second;
|
||||
|
||||
in->choose_lock_states();
|
||||
dout(15) << " chose lock states on " << *in << dendl;
|
||||
|
||||
@ -4024,21 +4023,25 @@ void MDCache::process_reconnected_caps()
|
||||
|
||||
check_realm_past_parents(realm);
|
||||
|
||||
// also, make sure client's cap is in the correct snaprealm.
|
||||
for (map<client_t,inodeno_t>::iterator q = p->second.begin();
|
||||
q != p->second.end();
|
||||
q++) {
|
||||
if (q->second == realm->inode->ino()) {
|
||||
dout(15) << " client" << q->first << " has correct realm " << q->second << dendl;
|
||||
} else {
|
||||
dout(15) << " client" << q->first << " has wrong realm " << q->second
|
||||
<< " != " << realm->inode->ino() << dendl;
|
||||
if (realm->have_past_parents_open()) {
|
||||
// ok, include in a split message _now_.
|
||||
prepare_realm_split(realm, q->first, in->ino(), splits);
|
||||
map<CInode*,map<client_t,inodeno_t> >::iterator p = reconnected_caps.find(in);
|
||||
if (p != reconnected_caps.end()) {
|
||||
|
||||
// also, make sure client's cap is in the correct snaprealm.
|
||||
for (map<client_t,inodeno_t>::iterator q = p->second.begin();
|
||||
q != p->second.end();
|
||||
q++) {
|
||||
if (q->second == realm->inode->ino()) {
|
||||
dout(15) << " client" << q->first << " has correct realm " << q->second << dendl;
|
||||
} else {
|
||||
// send the split later.
|
||||
missing_snap_parents[realm->inode][q->first].insert(in->ino());
|
||||
dout(15) << " client" << q->first << " has wrong realm " << q->second
|
||||
<< " != " << realm->inode->ino() << dendl;
|
||||
if (realm->have_past_parents_open()) {
|
||||
// ok, include in a split message _now_.
|
||||
prepare_realm_split(realm, q->first, in->ino(), splits);
|
||||
} else {
|
||||
// send the split later.
|
||||
missing_snap_parents[realm->inode][q->first].insert(in->ino());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -755,7 +755,7 @@ public:
|
||||
reconnected_snaprealms[ino][client] = seq;
|
||||
}
|
||||
void process_imported_caps();
|
||||
void process_reconnected_caps();
|
||||
void choose_lock_states_and_reconnect_caps();
|
||||
void prepare_realm_split(SnapRealm *realm, client_t client, inodeno_t ino,
|
||||
map<client_t,MClientSnap*>& splits);
|
||||
void do_realm_invalidate_and_update_notify(CInode *in, int snapop, bool nosend=false);
|
||||
|
@ -365,7 +365,7 @@ public:
|
||||
|
||||
|
||||
|
||||
virtual bool is_dirty() { return false; }
|
||||
virtual bool is_dirty() const { return false; }
|
||||
|
||||
|
||||
// can_*
|
||||
|
@ -1677,7 +1677,7 @@ void OSD::send_pg_stats()
|
||||
if (osd_stat_updated || !pg_stat_queue.empty()) {
|
||||
osd_stat_updated = false;
|
||||
|
||||
dout(1) << "send_pg_stats - " << pg_stat_queue.size() << " pgs updated" << dendl;
|
||||
dout(10) << "send_pg_stats - " << pg_stat_queue.size() << " pgs updated" << dendl;
|
||||
|
||||
utime_t had_for = g_clock.now();
|
||||
had_for -= had_map_since;
|
||||
@ -4459,11 +4459,11 @@ void OSD::handle_op(MOSDOp *op)
|
||||
|
||||
int err = -EPERM;
|
||||
if (op->may_read() && !(perm & OSD_POOL_CAP_R)) {
|
||||
dout(0) << "no READ permission to access pool " << pg->pool->name << dendl;
|
||||
dout(10) << "no READ permission to access pool " << pg->pool->name << dendl;
|
||||
} else if (op->may_write() && !(perm & OSD_POOL_CAP_W)) {
|
||||
dout(0) << "no WRITE permission to access pool " << pg->pool->name << dendl;
|
||||
dout(10) << "no WRITE permission to access pool " << pg->pool->name << dendl;
|
||||
} else if (op->require_exec_caps() && !(perm & OSD_POOL_CAP_X)) {
|
||||
dout(0) << "no EXEC permission to access pool " << pg->pool->name << dendl;
|
||||
dout(10) << "no EXEC permission to access pool " << pg->pool->name << dendl;
|
||||
} else {
|
||||
err = 0;
|
||||
}
|
||||
@ -4822,7 +4822,7 @@ int OSD::get_class(const string& cname, ClassVersion& version, pg_t pgid, Messag
|
||||
*pcls = cls;
|
||||
return 0;
|
||||
case ClassHandler::ClassData::CLASS_INVALID:
|
||||
dout(0) << "class not supported" << dendl;
|
||||
dout(1) << "class " << cname << " not supported" << dendl;
|
||||
return -EOPNOTSUPP;
|
||||
case ClassHandler::ClassData::CLASS_ERROR:
|
||||
dout(0) << "error loading class!" << dendl;
|
||||
@ -4911,7 +4911,7 @@ void OSD::init_op_flags(MOSDOp *op)
|
||||
is_write = flags & CLS_METHOD_WR;
|
||||
is_public = flags & CLS_METHOD_PUBLIC;
|
||||
|
||||
dout(0) << "class " << cname << " method " << mname
|
||||
dout(10) << "class " << cname << " method " << mname
|
||||
<< " flags=" << (is_read ? "r" : "") << (is_write ? "w" : "") << dendl;
|
||||
if (is_read)
|
||||
op->rmw_flags |= CEPH_OSD_FLAG_READ;
|
||||
|
@ -139,7 +139,7 @@ void ReplicatedPG::wait_for_degraded_object(const sobject_t& soid, Message *m)
|
||||
// ==========================================================
|
||||
void ReplicatedPG::do_pg_op(MOSDOp *op)
|
||||
{
|
||||
dout(0) << "do_pg_op " << *op << dendl;
|
||||
dout(10) << "do_pg_op " << *op << dendl;
|
||||
|
||||
bufferlist outdata;
|
||||
int result = 0;
|
||||
@ -813,7 +813,6 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
|
||||
|
||||
case CEPH_OSD_OP_READ:
|
||||
{
|
||||
dout(0) << "CEPH_OSD_OP_READ" << dendl;
|
||||
// read into a buffer
|
||||
bufferlist bl;
|
||||
int r = osd->store->read(coll_t::build_pg_coll(info.pgid), soid, op.extent.offset, op.extent.length, bl);
|
||||
@ -828,7 +827,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
|
||||
}
|
||||
info.stats.num_rd_kb += SHIFT_ROUND_UP(op.extent.length, 10);
|
||||
info.stats.num_rd++;
|
||||
dout(0) << " read got " << r << " / " << op.extent.length << " bytes from obj " << soid << dendl;
|
||||
dout(10) << " read got " << r << " / " << op.extent.length << " bytes from obj " << soid << dendl;
|
||||
|
||||
__u32 seq = oi.truncate_seq;
|
||||
// are we beyond truncate_size?
|
||||
@ -845,7 +844,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
|
||||
bufferlist keep;
|
||||
|
||||
// keep first part of odata; trim at truncation point
|
||||
dout(0) << " obj " << soid << " seq " << seq
|
||||
dout(10) << " obj " << soid << " seq " << seq
|
||||
<< ": trimming overlap " << from << "~" << trim << dendl;
|
||||
keep.substr_of(odata, 0, odata.length() - trim);
|
||||
odata.claim(keep);
|
||||
@ -932,7 +931,6 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
|
||||
|
||||
case CEPH_OSD_OP_CMPXATTR:
|
||||
{
|
||||
dout(0) << "CEPH_OSD_OP_CMPXATTR" << dendl;
|
||||
string aname;
|
||||
bp.copy(op.xattr.name_len, aname);
|
||||
string name = "_" + aname;
|
||||
@ -970,16 +968,16 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
dout(0) << "comparison returned false" << dendl;
|
||||
dout(10) << "comparison returned false" << dendl;
|
||||
result = -ECANCELED;
|
||||
break;
|
||||
}
|
||||
if (result < 0) {
|
||||
dout(0) << "comparison returned " << result << " " << strerror(-result) << dendl;
|
||||
dout(10) << "comparison returned " << result << " " << strerror(-result) << dendl;
|
||||
break;
|
||||
}
|
||||
|
||||
dout(0) << "comparison returned true" << dendl;
|
||||
dout(10) << "comparison returned true" << dendl;
|
||||
info.stats.num_rd++;
|
||||
}
|
||||
break;
|
||||
@ -3158,7 +3156,7 @@ void ReplicatedPG::sub_op_push(MOSDSubOp *op)
|
||||
|
||||
dout(10) << "sub_op_push need " << data_needed << ", got " << data_subset << dendl;
|
||||
if (!data_needed.subset_of(data_subset)) {
|
||||
dout(0) << " we did not get enough of " << soid << " object data" << dendl;
|
||||
dout(0) << "sub_op_push we did not get enough of " << soid << " object data" << dendl;
|
||||
op->put();
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user