diff --git a/src/box/phia.c b/src/box/phia.c index 6c1ee62a456b32ee56ac2c8869c7d5ddcba94220..d514d67da10b5cac7d5d80d3c8ce854e09d76875 100644 --- a/src/box/phia.c +++ b/src/box/phia.c @@ -13890,7 +13890,7 @@ phia_env_get_scheduler(struct phia_env *env) } const char * -phia_env_get_error(struct phia_env *env) +phia_error(struct phia_env *env) { static char error[128]; error[0] = 0; @@ -13899,7 +13899,7 @@ phia_env_get_error(struct phia_env *env) } static struct phia_document * -phia_document_new(struct phia_env*, struct phia_index *, const struct sv*); +phia_document_newv(struct phia_env*, struct phia_index *, const struct sv*); int phia_document_delete(struct phia_document *v) @@ -14007,7 +14007,7 @@ enum { }; int -phia_env_open(struct phia_env *e) +phia_recover(struct phia_env *e) { /* recover phases */ int status = sr_status(&e->status); @@ -14630,7 +14630,7 @@ phia_confcursor_next(struct phia_confcursor *c, const char **key, } struct phia_confcursor * -phia_confcursor(struct phia_env *e) +phia_confcursor_new(struct phia_env *e) { struct phia_confcursor *c; c = ss_malloc(&e->a, sizeof(struct phia_confcursor)); @@ -14669,7 +14669,7 @@ phia_cursor_delete(struct phia_cursor *c) } struct phia_document * -phia_cursor_get(struct phia_cursor *c, struct phia_document *key) +phia_cursor_next(struct phia_cursor *c, struct phia_document *key) { struct phia_index *db = key->db; if (unlikely(! key->orderset)) @@ -14693,7 +14693,7 @@ phia_cursor_set_read_commited(struct phia_cursor *c, bool read_commited) } struct phia_cursor * -phia_cursor(struct phia_index *db) +phia_cursor_new(struct phia_index *db) { struct phia_env *e = db->env; struct phia_cursor *c; @@ -15005,7 +15005,7 @@ phia_index_result(struct phia_env *e, struct scread *r) sv_init(&result, &sv_vif, r->result, NULL); r->result = NULL; - struct phia_document *v = phia_document_new(e, r->db, &result); + struct phia_document *v = phia_document_newv(e, r->db, &result); if (unlikely(v == NULL)) return NULL; v->cache_only = r->arg.cache_only; @@ -15073,7 +15073,7 @@ phia_index_read(struct phia_index *db, struct phia_document *o, if (unlikely(rc == -1 || rc == 2 /* delete */)) goto error; if (rc == 1 && !sv_is(&vup, SVUPSERT)) { - ret = phia_document_new(e, db, &vup); + ret = phia_document_newv(e, db, &vup); if (likely(ret)) { ret->cache_only = o->cache_only; ret->oldest_only = o->oldest_only; @@ -15419,7 +15419,7 @@ phia_document_lsn(struct phia_document *v) } static struct phia_document * -phia_document_new(struct phia_env *e, struct phia_index *db, const struct sv *vp) +phia_document_newv(struct phia_env *e, struct phia_index *db, const struct sv *vp) { struct phia_document *doc; doc = ss_malloc(&e->a, sizeof(struct phia_document)); @@ -15520,7 +15520,7 @@ phia_delete(struct phia_tx *tx, struct phia_document *key) } struct phia_document * -phia_tx_get(struct phia_tx *t, struct phia_document *key) +phia_get(struct phia_tx *t, struct phia_document *key) { struct phia_index *db = key->db; struct phia_env *e = db->env; @@ -15755,10 +15755,10 @@ phia_env_new(void) } struct phia_document * -phia_document(struct phia_index *db) +phia_document_new(struct phia_index *db) { struct phia_env *env = db->env; - return phia_document_new(env, db, NULL); + return phia_document_newv(env, db, NULL); } struct phia_service * diff --git a/src/box/phia.h b/src/box/phia.h index 51b90aa2b0e5f16ae3dba0e05ecc8c95d6ac79eb..e8337f187447eb6510e0cb7573933abcb051e649 100644 --- a/src/box/phia.h +++ b/src/box/phia.h @@ -30,14 +30,15 @@ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#ifdef __cplusplus -extern "C" { -#endif #include <stdlib.h> #include <stdint.h> #include <stdbool.h> +#ifdef __cplusplus +extern "C" { +#endif + struct phia_env; struct phia_service; struct phia_tx; @@ -48,35 +49,31 @@ struct phia_confcursor; struct phia_confkv; struct key_def; +/* + * Environment + */ + struct phia_env * phia_env_new(void); -int -phia_env_open(struct phia_env *e); - int phia_env_delete(struct phia_env *e); const char * -phia_env_get_error(struct phia_env *e); - -struct phia_tx * -phia_begin(struct phia_env *e); +phia_error(struct phia_env *e); -int -phia_replace(struct phia_tx *tx, struct phia_document *doc); - -int -phia_upsert(struct phia_tx *tx, struct phia_document *doc); +struct phia_confcursor * +phia_confcursor_new(struct phia_env *env); -int -phia_delete(struct phia_tx *tx, struct phia_document *doc); +void +phia_confcursor_delete(struct phia_confcursor *confcursor); int -phia_commit(struct phia_tx *tx); +phia_confcursor_next(struct phia_confcursor *confcursor, const char **key, + const char **value); int -phia_rollback(struct phia_tx *tx); +phia_recover(struct phia_env *env); int phia_checkpoint(struct phia_env *env); @@ -84,41 +81,54 @@ phia_checkpoint(struct phia_env *env); bool phia_checkpoint_is_active(struct phia_env *env); -struct phia_document * -phia_document(struct phia_index *index); +/* + * Workers + */ struct phia_service * phia_service_new(struct phia_env *env); + int phia_service_do(struct phia_service *srv); -void -phia_service_delete(struct phia_service *srv); -struct phia_cursor * -phia_cursor(struct phia_index *index); void -phia_cursor_delete(struct phia_cursor *cursor); -void -phia_cursor_set_read_commited(struct phia_cursor *cursor, bool read_commited); -struct phia_document * -phia_cursor_get(struct phia_cursor *cursor, struct phia_document *key); +phia_service_delete(struct phia_service *srv); /* - * Configuration + * Transaction */ -struct phia_confcursor * -phia_confcursor(struct phia_env *env); -void -phia_confcursor_delete(struct phia_confcursor *c); +struct phia_tx * +phia_begin(struct phia_env *e); + +struct phia_document * +phia_get(struct phia_tx *tx, struct phia_document *key); int -phia_confcursor_next(struct phia_confcursor *c, const char **key, - const char **value); +phia_replace(struct phia_tx *tx, struct phia_document *doc); + +int +phia_upsert(struct phia_tx *tx, struct phia_document *doc); + +int +phia_delete(struct phia_tx *tx, struct phia_document *doc); + +int +phia_commit(struct phia_tx *tx); + +int +phia_rollback(struct phia_tx *tx); + +void +phia_tx_set_lsn(struct phia_tx *tx, int64_t lsn); + +void +phia_tx_set_half_commit(struct phia_tx *tx, bool half_commit); /* * Index */ + struct phia_index * phia_index_by_name(struct phia_env *env, const char *name); @@ -146,14 +156,21 @@ phia_index_bsize(struct phia_index *db); uint64_t phia_index_size(struct phia_index *db); +/* + * Index Cursor + */ + +struct phia_cursor * +phia_cursor_new(struct phia_index *index); + void -phia_tx_set_lsn(struct phia_tx *tx, int64_t lsn); +phia_cursor_delete(struct phia_cursor *cursor); void -phia_tx_set_half_commit(struct phia_tx *tx, bool half_commit); +phia_cursor_set_read_commited(struct phia_cursor *cursor, bool read_commited); struct phia_document * -phia_tx_get(struct phia_tx *t, struct phia_document *key); +phia_cursor_next(struct phia_cursor *cursor, struct phia_document *key); /* * Document @@ -167,18 +184,21 @@ enum phia_order { PHIA_EQ }; +struct phia_document * +phia_document_new(struct phia_index *index); + int -phia_document_open(struct phia_document *v); +phia_document_delete(struct phia_document *doc); int -phia_document_delete(struct phia_document *v); +phia_document_open(struct phia_document *doc); int phia_document_set_field(struct phia_document *doc, const char *path, const char *value, int size); char * -phia_document_field(struct phia_document *v, const char *path, int *size); +phia_document_field(struct phia_document *doc, const char *path, int *size); void phia_document_set_cache_only(struct phia_document *doc, bool cache_only); diff --git a/src/box/phia_engine.cc b/src/box/phia_engine.cc index 5a1a0a4375db78680859cc50a1e7ca02507e28f8..c3adc9ea72951ccee960abd0fb58c6af4acec93f 100644 --- a/src/box/phia_engine.cc +++ b/src/box/phia_engine.cc @@ -215,7 +215,7 @@ phia_workers_stop(void) int phia_info(const char *name, phia_info_f cb, void *arg) { PhiaEngine *e = (PhiaEngine *)engine_find("phia"); - struct phia_confcursor *cursor = phia_confcursor(e->env); + struct phia_confcursor *cursor = phia_confcursor_new(e->env); const char *key; const char *value; if (name) { @@ -251,7 +251,7 @@ phia_tx_read_cb(struct coio_task *ptr) { struct phia_read_task *task = (struct phia_read_task *) ptr; - task->result = phia_tx_get(task->tx, task->key); + task->result = phia_get(task->tx, task->key); return 0; } @@ -269,7 +269,7 @@ phia_cursor_read_cb(struct coio_task *ptr) { struct phia_read_task *task = (struct phia_read_task *) ptr; - task->result = phia_cursor_get(task->cursor, task->key); + task->result = phia_cursor_next(task->cursor, task->key); return 0; } @@ -355,9 +355,9 @@ PhiaEngine::init() if (env == NULL) panic("failed to create phia environment"); worker_pool_size = cfg_geti("phia.threads"); - int rc = phia_env_open(env); + int rc = phia_recover(env); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); } void @@ -366,9 +366,9 @@ PhiaEngine::endRecovery() if (recovery_complete) return; /* complete two-phase recovery */ - int rc = phia_env_open(env); + int rc = phia_recover(env); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); recovery_complete = 1; } @@ -419,9 +419,9 @@ join_send_space(struct space *sp, void *data) return; /* send database */ - struct phia_cursor *cursor = phia_cursor(pk->db); + struct phia_cursor *cursor = phia_cursor_new(pk->db); if (cursor == NULL) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); auto cursor_guard = make_scoped_guard([=]{ phia_cursor_delete(cursor); }); @@ -431,8 +431,8 @@ join_send_space(struct space *sp, void *data) * for duplicates */ phia_cursor_set_read_commited(cursor, true); - struct phia_document *obj = phia_document(pk->db); - while ((obj = phia_cursor_get(cursor, obj))) + struct phia_document *obj = phia_document_new(pk->db); + while ((obj = phia_cursor_next(cursor, obj))) { int64_t lsn = phia_document_lsn(obj); uint32_t tuple_size; @@ -479,11 +479,11 @@ PhiaEngine::dropIndex(Index *index) /* schedule asynchronous drop */ int rc = phia_index_drop(i->db); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); /* unref db object */ rc = phia_index_delete(i->db); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); i->db = NULL; i->env = NULL; } @@ -540,7 +540,7 @@ PhiaEngine::begin(struct txn *txn) assert(txn->engine_tx == NULL); txn->engine_tx = phia_begin(env); if (txn->engine_tx == NULL) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); } void @@ -568,7 +568,7 @@ PhiaEngine::prepare(struct txn *txn) tnt_raise(ClientError, ER_TRANSACTION_CONFLICT); break; case -1: - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); break; } } @@ -615,9 +615,9 @@ PhiaEngine::rollback(struct txn *txn) void PhiaEngine::beginWalRecovery() { - int rc = phia_env_open(env); + int rc = phia_recover(env); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); } int @@ -630,7 +630,7 @@ PhiaEngine::beginCheckpoint() int rc = phia_checkpoint(env); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); return 0; } diff --git a/src/box/phia_index.cc b/src/box/phia_index.cc index d5dd97c402385d43e1514c3aa71b118747a97b99..9cd2fd72216fbc42d2f34d843c89ff884e115ef8 100644 --- a/src/box/phia_index.cc +++ b/src/box/phia_index.cc @@ -50,9 +50,9 @@ struct phia_document * PhiaIndex::createDocument(const char *key, const char **keyend) { assert(key_def->part_count <= 8); - struct phia_document *obj = phia_document(db); + struct phia_document *obj = phia_document_new(db); if (obj == NULL) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); if (key == NULL) return obj; uint32_t i = 0; @@ -72,7 +72,7 @@ PhiaIndex::createDocument(const char *key, const char **keyend) part = ""; if (phia_document_set_field(obj, partname, part, partsize) == -1) tnt_raise(ClientError, ER_PHIA, - phia_env_get_error(env)); + phia_error(env)); i++; } if (keyend) { @@ -93,14 +93,14 @@ PhiaIndex::PhiaIndex(struct key_def *key_def_arg) /* create database */ db = phia_index_new(env, key_def); if (db == NULL) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); /* start two-phase recovery for a space: * a. created after snapshot recovery * b. created during log recovery */ rc = phia_index_open(db); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); format = space->format; tuple_format_ref(format, 1); } @@ -119,7 +119,7 @@ PhiaIndex::~PhiaIndex() goto error; error:; say_info("phia space %" PRIu32 " close error: %s", - key_def->space_id, phia_env_get_error(env)); + key_def->space_id, phia_error(env)); } size_t @@ -153,13 +153,13 @@ PhiaIndex::findByKey(const char *key, uint32_t part_count = 0) const rc = phia_document_open(obj); if (rc == -1) { phia_document_delete(obj); - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); } struct phia_document *result; if (transaction == NULL) { result = phia_index_get(db, obj); } else { - result = phia_tx_get(transaction, obj); + result = phia_get(transaction, obj); } if (result == NULL) { phia_document_set_cache_only(obj, false); @@ -231,7 +231,7 @@ phia_iterator_next(struct iterator *ptr) assert(it->cursor != NULL); /* read from cache */ - struct phia_document *obj = phia_cursor_get(it->cursor, it->current); + struct phia_document *obj = phia_cursor_next(it->cursor, it->current); if (likely(obj != NULL)) { phia_document_delete(it->current); it->current = obj; @@ -330,9 +330,9 @@ PhiaIndex::initIterator(struct iterator *ptr, default: return initIterator(ptr, type, key, part_count); } - it->cursor = phia_cursor(db); + it->cursor = phia_cursor_new(db); if (it->cursor == NULL) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(env)); + tnt_raise(ClientError, ER_PHIA, phia_error(env)); /* Position first key here, since key pointer might be * unavailable from lua. * diff --git a/src/box/phia_space.cc b/src/box/phia_space.cc index 696fd889da06ad3bcd27d574e1469a200944fd1d..08953ed982f55d0c89865fddfc5351d8d6fe7295 100644 --- a/src/box/phia_space.cc +++ b/src/box/phia_space.cc @@ -73,14 +73,14 @@ PhiaSpace::applySnapshotRow(struct space *space, struct request *request) struct phia_tx *tx = phia_begin(index->env); if (tx == NULL) { phia_document_delete(obj); - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(index->env)); + tnt_raise(ClientError, ER_PHIA, phia_error(index->env)); } int64_t signature = request->header->lsn; phia_tx_set_lsn(tx, signature); if (phia_replace(tx, obj) != 0) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(index->env)); + tnt_raise(ClientError, ER_PHIA, phia_error(index->env)); /* obj destroyed by phia_replace() */ int rc = phia_commit(tx); @@ -95,7 +95,7 @@ PhiaSpace::applySnapshotRow(struct space *space, struct request *request) tnt_raise(ClientError, ER_TRANSACTION_CONFLICT); return; case -1: - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(index->env)); + tnt_raise(ClientError, ER_PHIA, phia_error(index->env)); return; default: assert(0); @@ -144,7 +144,7 @@ PhiaSpace::executeReplace(struct txn*, int rc; rc = phia_replace(tx, obj); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(index->env)); + tnt_raise(ClientError, ER_PHIA, phia_error(index->env)); return NULL; } @@ -163,7 +163,7 @@ PhiaSpace::executeDelete(struct txn*, struct space *space, struct phia_tx *tx = (struct phia_tx *)(in_txn()->engine_tx); int rc = phia_delete(tx, obj); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(index->env)); + tnt_raise(ClientError, ER_PHIA, phia_error(index->env)); return NULL; } @@ -209,7 +209,7 @@ PhiaSpace::executeUpdate(struct txn*, struct space *space, int rc; rc = phia_replace(tx, obj); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(index->env)); + tnt_raise(ClientError, ER_PHIA, phia_error(index->env)); return NULL; } @@ -441,5 +441,5 @@ PhiaSpace::executeUpsert(struct txn*, struct space *space, int rc = phia_upsert(tx, obj); free(value); if (rc == -1) - tnt_raise(ClientError, ER_PHIA, phia_env_get_error(index->env)); + tnt_raise(ClientError, ER_PHIA, phia_error(index->env)); }