case OSD_OP_RDUNLOCK:
case OSD_OP_UPLOCK:
case OSD_OP_DNLOCK:
+ case OSD_OP_BALANCEREADS:
+ case OSD_OP_UNBALANCEREADS:
if (op->get_source().is_osd()) {
op_rep_modify(op);
} else {
case OSD_OP_BALANCEREADS:
dout(-10) << "apply_repop completed balance-reads on " << oid << dendl;
+ /*
if (waiting_for_balanced_reads.count(oid)) {
osd->take_waiters(waiting_for_balanced_reads[oid]);
waiting_for_balanced_reads.erase(oid);
}
+ */
break;
case OSD_OP_WRUNLOCK:
// balance-reads set?
char v;
- if (osd->store->getattr(op->get_oid(), "balance-reads", &v, 1) >= 0 ||
- balancing_reads.count(op->get_oid())) {
+ if ((op->get_op() != OSD_OP_BALANCEREADS && op->get_op() != OSD_OP_UNBALANCEREADS) &&
+ (osd->store->getattr(op->get_oid(), "balance-reads", &v, 1) >= 0 ||
+ balancing_reads.count(op->get_oid()))) {
if (!unbalancing_reads.count(op->get_oid())) {
// unbalance
// load balancing
set<object_t> balancing_reads;
set<object_t> unbalancing_reads;
- hash_map<object_t, list<Message*> > waiting_for_balanced_reads;
hash_map<object_t, list<Message*> > waiting_for_unbalanced_reads; // i.e. primary-lock
void get_rep_gather(RepGather*);