void stasis_record_write(int xid, Page * p, recordid rid, const byte *dat) { assert( (p->id == rid.page) && (p->memAddr != NULL) ); assert(rid.size <= BLOB_THRESHOLD_SIZE); byte * buf = stasis_record_write_begin(xid, p, rid); memcpy(buf, dat, stasis_record_type_to_size(rid.size)); stasis_record_write_done(xid,p,rid,buf); assert( (p->id == rid.page) && (p->memAddr != NULL) ); }
static int op_realloc(const LogEntry* e, Page* p) { assert(e->update.arg_size >= sizeof(alloc_arg)); const alloc_arg* arg = stasis_log_entry_update_args_cptr(e); recordid rid = { p->id, arg->slot, arg->type }; assert(stasis_record_type_read(e->xid, p, rid) == INVALID_SLOT); int ret = operate_helper(e->xid, p, rid); int64_t size = stasis_record_length_read(e->xid,p,rid); assert(e->update.arg_size == sizeof(alloc_arg) + size); rid.size = size; byte * buf = stasis_record_write_begin(e->xid,p,rid); memcpy(buf, arg+1, size); stasis_record_write_done(e->xid,p,rid,buf); rid.size = arg->type; return ret; }