static inline int se_confv_offline(srconf *c, srconfstmt *s) { se *e = s->ptr; if (s->op == SR_WRITE) { if (sr_status(&e->status)) { sr_error(s->r->e, "write to %s is offline-only", s->path); return -1; } } return se_confv(c, s); }
c->expire_period_us = c->expire_period * 1000000; /* .. */ db->r->scheme = &s->scheme; db->r->upsert = &s->upsert; db->r->stat = &db->stat; db->r->av = &db->a; db->r->ptr = db->index; return 0; } int se_dbopen(so *o) { sedb *db = se_cast(o, sedb*, SEDB); se *e = se_of(&db->o); assert(sr_status(&e->status) == SR_RECOVER); int rc; rc = se_dbscheme_set(db); if (ssunlikely(rc == -1)) return -1; sx_indexset(&db->coindex, db->scheme->id); sr_log(&e->log, "loading database '%s'", db->scheme->path); rc = si_open(db->index); if (ssunlikely(rc == -1)) { sr_statusset(&e->status, SR_MALFUNCTION); return -1; } db->created = rc; sc_register(&e->scheduler, db->index); return 0; }
break; rc = sc_step(&e->scheduler, w, sx_vlsn(&e->xm)); if (ssunlikely(rc == -1)) break; if (ssunlikely(rc == 0)) ss_sleep(10000000); /* 10ms */ } sc_workerpool_push(&e->scheduler.wp, w); return NULL; } static int se_open(so *o) { se *e = se_cast(o, se*, SE); int status = sr_status(&e->status); if (status != SR_OFFLINE) return -1; /* switch to recover phase */ sr_statusset(&e->status, SR_RECOVER); sr_log(&e->log, "sophia %d.%d git: %s", SR_VERSION_A - '0', SR_VERSION_B - '0', SR_VERSION_COMMIT); /* validate configuration */ int rc; rc = se_confvalidate(&e->conf); if (ssunlikely(rc == -1))