From: Kirill Yukhin <kyukhin@tarantool.org> To: vdavydov.dev@gmail.com Cc: tarantool-patches@freelists.org, Kirill Yukhin <kyukhin@tarantool.org> Subject: [PATCH v2 1/4] Pass necessary fields to tuple_format contructor Date: Thu, 24 Jan 2019 15:48:45 +0300 [thread overview] Message-ID: <8b7dbf2828cbab2ed7e11406dbd3b5e503a50493.1548333874.git.kyukhin@tarantool.org> (raw) In-Reply-To: <cover.1548333874.git.kyukhin@tarantool.org> There were three extra fields of tuple_format which were setup after it was created. Fix that by extending tuple_format contstructor w/ three new arguments: engine, is_temporary, exact_field_count. --- src/box/blackhole.c | 6 +++--- src/box/memtx_space.c | 9 ++++----- src/box/tuple.c | 8 ++++---- src/box/tuple_format.c | 13 ++++++++----- src/box/tuple_format.h | 11 ++++++++--- src/box/vinyl.c | 11 ++++++----- src/box/vy_lsm.c | 9 +++++---- test/unit/vy_iterators_helper.c | 12 ++++++------ test/unit/vy_mem.c | 4 ++-- test/unit/vy_point_lookup.c | 4 ++-- 10 files changed, 48 insertions(+), 39 deletions(-) diff --git a/src/box/blackhole.c b/src/box/blackhole.c index 0412ffe..6ada7a5 100644 --- a/src/box/blackhole.c +++ b/src/box/blackhole.c @@ -155,13 +155,13 @@ blackhole_engine_create_space(struct engine *engine, struct space_def *def, /* Allocate tuples on runtime arena, but check space format. */ struct tuple_format *format; - format = tuple_format_new(&tuple_format_runtime->vtab, NULL, 0, - def->fields, def->field_count, def->dict); + format = tuple_format_new(&tuple_format_runtime->vtab, NULL, NULL, 0, + def->fields, def->field_count, + def->exact_field_count, def->dict, false); if (format == NULL) { free(space); return NULL; } - format->exact_field_count = def->exact_field_count; tuple_format_ref(format); if (space_create(space, engine, &blackhole_space_vtab, diff --git a/src/box/memtx_space.c b/src/box/memtx_space.c index eb790a6..4aad8da 100644 --- a/src/box/memtx_space.c +++ b/src/box/memtx_space.c @@ -990,15 +990,14 @@ memtx_space_new(struct memtx_engine *memtx, keys[key_count++] = index_def->key_def; struct tuple_format *format = - tuple_format_new(&memtx_tuple_format_vtab, keys, key_count, - def->fields, def->field_count, def->dict); + tuple_format_new(&memtx_tuple_format_vtab, memtx, keys, key_count, + def->fields, def->field_count, + def->exact_field_count, def->dict, + def->opts.is_temporary); if (format == NULL) { free(memtx_space); return NULL; } - format->engine = memtx; - format->is_temporary = def->opts.is_temporary; - format->exact_field_count = def->exact_field_count; tuple_format_ref(format); if (space_create((struct space *)memtx_space, (struct engine *)memtx, diff --git a/src/box/tuple.c b/src/box/tuple.c index 2343f0e..a87b2bd 100644 --- a/src/box/tuple.c +++ b/src/box/tuple.c @@ -207,8 +207,8 @@ tuple_init(field_name_hash_f hash) /* * Create a format for runtime tuples */ - tuple_format_runtime = tuple_format_new(&tuple_format_runtime_vtab, - NULL, 0, NULL, 0, NULL); + tuple_format_runtime = tuple_format_new(&tuple_format_runtime_vtab, NULL, + NULL, 0, NULL, 0, 0, NULL, false); if (tuple_format_runtime == NULL) return -1; @@ -379,8 +379,8 @@ box_tuple_format_t * box_tuple_format_new(struct key_def **keys, uint16_t key_count) { box_tuple_format_t *format = - tuple_format_new(&tuple_format_runtime_vtab, - keys, key_count, NULL, 0, NULL); + tuple_format_new(&tuple_format_runtime_vtab, NULL, + keys, key_count, NULL, 0, 0, NULL, false); if (format != NULL) tuple_format_ref(format); return format; diff --git a/src/box/tuple_format.c b/src/box/tuple_format.c index e11b4e6..559c601 100644 --- a/src/box/tuple_format.c +++ b/src/box/tuple_format.c @@ -398,17 +398,20 @@ tuple_format_delete(struct tuple_format *format) } struct tuple_format * -tuple_format_new(struct tuple_format_vtab *vtab, struct key_def * const *keys, - uint16_t key_count, const struct field_def *space_fields, - uint32_t space_field_count, struct tuple_dictionary *dict) +tuple_format_new(struct tuple_format_vtab *vtab, void *engine, + struct key_def * const *keys, uint16_t key_count, + const struct field_def *space_fields, + uint32_t space_field_count, uint32_t exact_field_count, + struct tuple_dictionary *dict, bool is_temporary) { struct tuple_format *format = tuple_format_alloc(keys, key_count, space_field_count, dict); if (format == NULL) return NULL; format->vtab = *vtab; - format->engine = NULL; - format->is_temporary = false; + format->engine = engine; + format->is_temporary = is_temporary; + format->exact_field_count = exact_field_count; if (tuple_format_register(format) < 0) { tuple_format_destroy(format); free(format); diff --git a/src/box/tuple_format.h b/src/box/tuple_format.h index 30b93b6..d15fef2 100644 --- a/src/box/tuple_format.h +++ b/src/box/tuple_format.h @@ -258,18 +258,23 @@ tuple_format_unref(struct tuple_format *format) /** * Allocate, construct and register a new in-memory tuple format. * @param vtab Virtual function table for specific engines. + * @param engine Pointer to storage engine. * @param keys Array of key_defs of a space. * @param key_count The number of keys in @a keys array. * @param space_fields Array of fields, defined in a space format. * @param space_field_count Length of @a space_fields. + * @param exact_field_count Exact field count for format. + * @param is_temporary Set if format belongs to temporary space. * * @retval not NULL Tuple format. * @retval NULL Memory error. */ struct tuple_format * -tuple_format_new(struct tuple_format_vtab *vtab, struct key_def * const *keys, - uint16_t key_count, const struct field_def *space_fields, - uint32_t space_field_count, struct tuple_dictionary *dict); +tuple_format_new(struct tuple_format_vtab *vtab, void *engine, + struct key_def * const *keys, uint16_t key_count, + const struct field_def *space_fields, + uint32_t space_field_count, uint32_t exact_field_count, + struct tuple_dictionary *dict, bool is_temporary); /** * Check, if @a format1 can store any tuples of @a format2. For diff --git a/src/box/vinyl.c b/src/box/vinyl.c index d6117f4..49e8372 100644 --- a/src/box/vinyl.c +++ b/src/box/vinyl.c @@ -619,13 +619,13 @@ vinyl_engine_create_space(struct engine *engine, struct space_def *def, keys[key_count++] = index_def->key_def; struct tuple_format *format = - tuple_format_new(&vy_tuple_format_vtab, keys, key_count, - def->fields, def->field_count, def->dict); + tuple_format_new(&vy_tuple_format_vtab, NULL, keys, key_count, + def->fields, def->field_count, + def->exact_field_count, def->dict, false); if (format == NULL) { free(space); return NULL; } - format->exact_field_count = def->exact_field_count; tuple_format_ref(format); if (space_create(space, engine, &vinyl_space_vtab, @@ -3043,8 +3043,9 @@ vy_send_lsm(struct vy_join_ctx *ctx, struct vy_lsm_recovery_info *lsm_info) lsm_info->key_part_count); if (ctx->key_def == NULL) goto out; - ctx->format = tuple_format_new(&vy_tuple_format_vtab, &ctx->key_def, - 1, NULL, 0, NULL); + ctx->format = tuple_format_new(&vy_tuple_format_vtab, NULL, + &ctx->key_def, 1, NULL, 0, 0, NULL, + false); if (ctx->format == NULL) goto out_free_key_def; tuple_format_ref(ctx->format); diff --git a/src/box/vy_lsm.c b/src/box/vy_lsm.c index 5eb3fd7..7a6ba6e 100644 --- a/src/box/vy_lsm.c +++ b/src/box/vy_lsm.c @@ -60,8 +60,8 @@ vy_lsm_env_create(struct vy_lsm_env *env, const char *path, vy_upsert_thresh_cb upsert_thresh_cb, void *upsert_thresh_arg) { - env->key_format = tuple_format_new(&vy_tuple_format_vtab, - NULL, 0, NULL, 0, NULL); + env->key_format = tuple_format_new(&vy_tuple_format_vtab, NULL, + NULL, 0, NULL, 0, 0, NULL, false); if (env->key_format == NULL) return -1; tuple_format_ref(env->key_format); @@ -153,8 +153,9 @@ vy_lsm_new(struct vy_lsm_env *lsm_env, struct vy_cache_env *cache_env, */ lsm->disk_format = format; } else { - lsm->disk_format = tuple_format_new(&vy_tuple_format_vtab, - &cmp_def, 1, NULL, 0, NULL); + lsm->disk_format = tuple_format_new(&vy_tuple_format_vtab, NULL, + &cmp_def, 1, NULL, 0, 0, + NULL, false); if (lsm->disk_format == NULL) goto fail_format; } diff --git a/test/unit/vy_iterators_helper.c b/test/unit/vy_iterators_helper.c index 7fad560..6808ff4 100644 --- a/test/unit/vy_iterators_helper.c +++ b/test/unit/vy_iterators_helper.c @@ -21,8 +21,8 @@ vy_iterator_C_test_init(size_t cache_size) tuple_init(NULL); vy_cache_env_create(&cache_env, cord_slab_cache()); vy_cache_env_set_quota(&cache_env, cache_size); - vy_key_format = tuple_format_new(&vy_tuple_format_vtab, NULL, 0, - NULL, 0, NULL); + vy_key_format = tuple_format_new(&vy_tuple_format_vtab, NULL, NULL, 0, + NULL, 0, 0, NULL, false); tuple_format_ref(vy_key_format); size_t mem_size = 64 * 1024 * 1024; @@ -201,8 +201,8 @@ create_test_mem(struct key_def *def) /* Create format */ struct key_def * const defs[] = { def }; struct tuple_format *format = - tuple_format_new(&vy_tuple_format_vtab, defs, def->part_count, - NULL, 0, NULL); + tuple_format_new(&vy_tuple_format_vtab, NULL, defs, + def->part_count, NULL, 0, 0, NULL, false); fail_if(format == NULL); /* Create mem */ @@ -219,8 +219,8 @@ create_test_cache(uint32_t *fields, uint32_t *types, *def = box_key_def_new(fields, types, key_cnt); assert(*def != NULL); vy_cache_create(cache, &cache_env, *def, true); - *format = tuple_format_new(&vy_tuple_format_vtab, def, 1, NULL, 0, - NULL); + *format = tuple_format_new(&vy_tuple_format_vtab, NULL, def, 1, NULL, 0, + 0, NULL, false); tuple_format_ref(*format); } diff --git a/test/unit/vy_mem.c b/test/unit/vy_mem.c index ebf3fbc..a13c58b 100644 --- a/test/unit/vy_mem.c +++ b/test/unit/vy_mem.c @@ -77,8 +77,8 @@ test_iterator_restore_after_insertion() /* Create format */ struct tuple_format *format = tuple_format_new(&vy_tuple_format_vtab, - &key_def, 1, NULL, 0, - NULL); + NULL, &key_def, 1, NULL, + 0, 0, NULL, false); assert(format != NULL); tuple_format_ref(format); diff --git a/test/unit/vy_point_lookup.c b/test/unit/vy_point_lookup.c index 65dafcb..c19d307 100644 --- a/test/unit/vy_point_lookup.c +++ b/test/unit/vy_point_lookup.c @@ -84,8 +84,8 @@ test_basic() vy_cache_create(&cache, &cache_env, key_def, true); struct tuple_format *format = tuple_format_new(&vy_tuple_format_vtab, - &key_def, 1, NULL, 0, - NULL); + NULL, &key_def, 1, NULL, + 0, 0, NULL, false); isnt(format, NULL, "tuple_format_new is not NULL"); tuple_format_ref(format); -- 2.19.1
next prev parent reply other threads:[~2019-01-24 12:48 UTC|newest] Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-01-24 12:48 [PATCH v2 0/4] Reuse tuple formats for ephemeral spaces Kirill Yukhin 2019-01-24 12:48 ` Kirill Yukhin [this message] 2019-01-24 17:26 ` [PATCH v2 1/4] Pass necessary fields to tuple_format contructor Vladimir Davydov 2019-01-24 12:48 ` [PATCH v2 2/4] Set is_temporary flag for formats of ephemeral spaces Kirill Yukhin 2019-01-24 17:26 ` Vladimir Davydov 2019-01-24 12:48 ` [PATCH v2 3/4] sql: set error type in case of ephemral space creation failure Kirill Yukhin 2019-01-24 17:26 ` Vladimir Davydov 2019-01-24 12:48 ` [PATCH v2 4/4] Allow to reuse tuple_formats for ephemeral spaces Kirill Yukhin 2019-01-24 17:49 ` Vladimir Davydov 2019-01-25 6:05 ` Kirill Yukhin 2019-01-25 9:01 ` Vladimir Davydov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=8b7dbf2828cbab2ed7e11406dbd3b5e503a50493.1548333874.git.kyukhin@tarantool.org \ --to=kyukhin@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=vdavydov.dev@gmail.com \ --subject='Re: [PATCH v2 1/4] Pass necessary fields to tuple_format contructor' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox