if (!j && !txc->first_collection)
txc->first_collection = cvec[j];
}
+ vector<OnodeRef> ovec(i.objects.size());
- while (i.have_op()) {
+ for (; i.have_op(); ++pos) {
Transaction::Op *op = i.decode_op();
int r = 0;
CollectionRef &c = cvec[op->cid];
+ switch (op->op) {
+ case Transaction::OP_RMCOLL:
+ {
+ coll_t cid = i.get_cid(op->cid);
+ r = _remove_collection(txc, cid, &c);
+ if (!r)
+ continue;
+ }
+ break;
+
+ case Transaction::OP_MKCOLL:
+ {
+ assert(!c);
+ coll_t cid = i.get_cid(op->cid);
+ r = _create_collection(txc, cid, op->split_bits, &c);
+ if (!r)
+ continue;
+ }
+ break;
+
+ case Transaction::OP_SPLIT_COLLECTION:
+ assert(0 == "deprecated");
+ break;
+
+ case Transaction::OP_SPLIT_COLLECTION2:
+ {
+ uint32_t bits = op->split_bits;
+ uint32_t rem = op->split_rem;
+ r = _split_collection(txc, c, cvec[op->dest_cid], bits, rem);
+ if (!r)
+ continue;
+ }
+ break;
+ }
+ if (r < 0) {
+ dout(0) << " error " << cpp_strerror(r)
+ << " not handled on operation " << op->op
+ << " (op " << pos << ", counting from 0)" << dendl;
+ dout(0) << " transaction dump:\n";
+ JSONFormatter f(true);
+ f.open_object_section("transaction");
+ t->dump(&f);
+ f.close_section();
+ f.flush(*_dout);
+ *_dout << dendl;
+ assert(0 == "unexpected error");
+ }
+
+ RWLock::WLocker l(c->lock);
+
switch (op->op) {
case Transaction::OP_NOP:
break;
}
break;
- case Transaction::OP_MKCOLL:
- {
- assert(!c);
- coll_t cid = i.get_cid(op->cid);
- r = _create_collection(txc, cid, op->split_bits, &c);
- }
- break;
-
case Transaction::OP_COLL_HINT:
{
uint32_t type = op->hint_type;
}
break;
- case Transaction::OP_RMCOLL:
- {
- coll_t cid = i.get_cid(op->cid);
- r = _remove_collection(txc, cid, &c);
- }
- break;
-
case Transaction::OP_COLL_ADD:
assert(0 == "not implemented");
break;
r = _omap_setheader(txc, c, oid, bl);
}
break;
- case Transaction::OP_SPLIT_COLLECTION:
- assert(0 == "deprecated");
- break;
- case Transaction::OP_SPLIT_COLLECTION2:
- {
- uint32_t bits = op->split_bits;
- uint32_t rem = op->split_rem;
- r = _split_collection(txc, c, cvec[op->dest_cid], bits, rem);
- }
- break;
case Transaction::OP_SETALLOCHINT:
{
assert(0 == "unexpected error");
}
}
-
- ++pos;
}
return 0;
{
dout(15) << __func__ << " " << c->cid << " " << oid << dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, true);
assert(o);
o->exists = true;
dout(15) << __func__ << " " << c->cid << " " << oid
<< " " << offset << "~" << length
<< dendl;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, true);
_assign_nid(txc, o);
int r = _do_write(txc, c, o, offset, length, bl, fadvise_flags);
<< dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
EnodeRef enode;
OnodeRef o = c->get_onode(oid, true);
_dump_onode(o);
<< dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
{
dout(15) << __func__ << " " << c->cid << " " << oid << dendl;
int r;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
<< dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
<< dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
<< " " << name << dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
dout(15) << __func__ << " " << c->cid << " " << oid << dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
dout(15) << __func__ << " " << c->cid << " " << oid << dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
bufferlist::iterator p = bl.begin();
__u32 num;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
dout(15) << __func__ << " " << c->cid << " " << oid << dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
string key;
if (!o || !o->exists) {
bufferlist::iterator p = bl.begin();
__u32 num;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
KeyValueDB::Iterator it;
string key_first, key_last;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
<< " write_size " << expected_write_size
<< dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
OnodeRef o = c->get_onode(oid, false);
if (!o || !o->exists) {
r = -ENOENT;
return -EINVAL;
}
- RWLock::WLocker l(c->lock);
bufferlist bl;
OnodeRef newo;
OnodeRef oldo = c->get_onode(old_oid, false);
<< " to offset " << dstoff << dendl;
int r = 0;
- RWLock::WLocker l(c->lock);
bufferlist bl;
OnodeRef newo;
OnodeRef oldo = c->get_onode(old_oid, false);
<< new_oid << dendl;
int r;
- RWLock::WLocker l(c->lock);
bufferlist bl;
string old_key, new_key;
OnodeRef newo;