int se_reqwrite(sereq *r) { sereqarg *arg = &r->arg; svlog *log = r->arg.log; se *e = se_of(r->object); /* set lsn */ sl_prepare(&e->lp, log, arg->lsn); /* log write */ if (! arg->recover) { sltx tl; sl_begin(&e->lp, &tl); int rc = sl_write(&tl, log); if (ssunlikely(rc == -1)) { sl_rollback(&tl); r->rc = -1; return -1; } sl_commit(&tl); } /* commit */ if (sslikely(arg->vlsn_generate)) arg->vlsn = sx_vlsn(&e->xm); uint64_t now = ss_utime(); svlogindex *i = (svlogindex*)log->index.s; svlogindex *end = (svlogindex*)log->index.p; while (i < end) { sedb *db = i->ptr; sitx ti; si_begin(&ti, &db->index, arg->vlsn, now, log, i); si_write(&ti, arg->recover); si_commit(&ti); i++; } return 0; }
int sc_commit(sc *s, svlog *log, uint64_t lsn, int recover) { /* write-ahead log */ swtx tl; sw_begin(s->wm, &tl, lsn, recover); int rc = sw_write(&tl, log); if (ssunlikely(rc == -1)) { sw_rollback(&tl); return -1; } sw_commit(&tl); /* index */ svlogindex *i = (svlogindex*)log->index.s; svlogindex *end = (svlogindex*)log->index.p; for (; i < end; i++) { if (i->count == 0) continue; si *index = i->r->ptr; sitx x; si_begin(&x, index); si_write(&x, log, i, recover); si_commit(&x); } return 0; }