From: Vladimir Davydov <vdavydov.dev@gmail.com> To: kostja@tarantool.org Cc: tarantool-patches@freelists.org Subject: [PATCH 2/6] Merge sysview_index.[hc] and sysview_engine.[hc] Date: Fri, 20 Jul 2018 20:43:31 +0300 [thread overview] Message-ID: <4e8cd4e1c3a64080d61eda881e8401226cbc79b5.1532107326.git.vdavydov.dev@gmail.com> (raw) In-Reply-To: <cover.1532107326.git.vdavydov.dev@gmail.com> In-Reply-To: <cover.1532107326.git.vdavydov.dev@gmail.com> They are fairly small and closely related so let's merge them and call the result sysview.[hc]. --- src/box/CMakeLists.txt | 3 +- src/box/box.cc | 2 +- src/box/{sysview_index.c => sysview.c} | 175 +++++++++++++++++++++++++++++-- src/box/{sysview_engine.h => sysview.h} | 16 +-- src/box/sysview_engine.c | 177 -------------------------------- src/box/sysview_index.h | 60 ----------- 6 files changed, 174 insertions(+), 259 deletions(-) rename src/box/{sysview_index.c => sysview.c} (71%) rename src/box/{sysview_engine.h => sysview.h} (84%) delete mode 100644 src/box/sysview_engine.c delete mode 100644 src/box/sysview_index.h diff --git a/src/box/CMakeLists.txt b/src/box/CMakeLists.txt index f4899091..fabeb3fd 100644 --- a/src/box/CMakeLists.txt +++ b/src/box/CMakeLists.txt @@ -68,8 +68,7 @@ add_library(box STATIC engine.c memtx_engine.c memtx_space.c - sysview_engine.c - sysview_index.c + sysview.c vinyl.c vy_stmt.c vy_mem.c diff --git a/src/box/box.cc b/src/box/box.cc index b07eefa8..9c3f87f0 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -50,7 +50,7 @@ #include "schema.h" #include "engine.h" #include "memtx_engine.h" -#include "sysview_engine.h" +#include "sysview.h" #include "vinyl.h" #include "space.h" #include "index.h" diff --git a/src/box/sysview_index.c b/src/box/sysview.c similarity index 71% rename from src/box/sysview_index.c rename to src/box/sysview.c index 309618ca..fb4ecf2d 100644 --- a/src/box/sysview_index.c +++ b/src/box/sysview.c @@ -28,17 +28,41 @@ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#include "sysview_index.h" -#include "sysview_engine.h" +#include "sysview.h" + +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> +#include <stdlib.h> #include <small/mempool.h> -#include "fiber.h" + +#include "diag.h" +#include "error.h" +#include "errcode.h" #include "schema.h" #include "sequence.h" #include "space.h" +#include "index.h" +#include "engine.h" #include "func.h" #include "tuple.h" #include "session.h" +typedef bool (*sysview_filter_f)(struct space *, struct tuple *); + +struct sysview_engine { + struct engine base; + /** Memory pool for index iterator. */ + struct mempool iterator_pool; +}; + +struct sysview_index { + struct index base; + uint32_t source_space_id; + uint32_t source_index_id; + sysview_filter_f filter; +}; + struct sysview_iterator { struct iterator base; struct iterator *source; @@ -182,6 +206,55 @@ static const struct index_vtab sysview_index_vtab = { /* .end_build = */ generic_index_end_build, }; +static void +sysview_space_destroy(struct space *space) +{ + free(space); +} + +static int +sysview_space_execute_replace(struct space *space, struct txn *txn, + struct request *request, struct tuple **result) +{ + (void)txn; + (void)request; + (void)result; + diag_set(ClientError, ER_VIEW_IS_RO, space->def->name); + return -1; +} + +static int +sysview_space_execute_delete(struct space *space, struct txn *txn, + struct request *request, struct tuple **result) +{ + (void)txn; + (void)request; + (void)result; + diag_set(ClientError, ER_VIEW_IS_RO, space->def->name); + return -1; +} + +static int +sysview_space_execute_update(struct space *space, struct txn *txn, + struct request *request, struct tuple **result) +{ + (void)txn; + (void)request; + (void)result; + diag_set(ClientError, ER_VIEW_IS_RO, space->def->name); + return -1; +} + +static int +sysview_space_execute_upsert(struct space *space, struct txn *txn, + struct request *request) +{ + (void)txn; + (void)request; + diag_set(ClientError, ER_VIEW_IS_RO, space->def->name); + return -1; +} + /* * System view filters. * Filter gives access to an object, if one of the following conditions is true: @@ -329,12 +402,12 @@ vsequence_filter(struct space *source, struct tuple *tuple) ((PRIV_WRDA | PRIV_X) & effective); } -struct sysview_index * -sysview_index_new(struct sysview_engine *sysview, - struct index_def *def, const char *space_name) +static struct index * +sysview_space_create_index(struct space *space, struct index_def *def) { assert(def->type == TREE); + struct sysview_engine *sysview = (struct sysview_engine *)space->engine; if (!mempool_is_initialized(&sysview->iterator_pool)) { mempool_create(&sysview->iterator_pool, cord_slab_cache(), sizeof(struct sysview_iterator)); @@ -377,7 +450,7 @@ sysview_index_new(struct sysview_engine *sysview, break; default: diag_set(ClientError, ER_MODIFY_INDEX, - def->name, space_name, + def->name, space_name(space), "unknown space for system view"); return NULL; } @@ -398,5 +471,91 @@ sysview_index_new(struct sysview_engine *sysview, index->source_space_id = source_space_id; index->source_index_id = source_index_id; index->filter = filter; - return index; + return &index->base; +} + +static const struct space_vtab sysview_space_vtab = { + /* .destroy = */ sysview_space_destroy, + /* .bsize = */ generic_space_bsize, + /* .apply_initial_join_row = */ generic_space_apply_initial_join_row, + /* .execute_replace = */ sysview_space_execute_replace, + /* .execute_delete = */ sysview_space_execute_delete, + /* .execute_update = */ sysview_space_execute_update, + /* .execute_upsert = */ sysview_space_execute_upsert, + /* .init_system_space = */ generic_init_system_space, + /* .check_index_def = */ generic_space_check_index_def, + /* .create_index = */ sysview_space_create_index, + /* .add_primary_key = */ generic_space_add_primary_key, + /* .drop_primary_key = */ generic_space_drop_primary_key, + /* .check_format = */ generic_space_check_format, + /* .build_index = */ generic_space_build_index, + /* .swap_index = */ generic_space_swap_index, + /* .prepare_alter = */ generic_space_prepare_alter, +}; + +static void +sysview_engine_shutdown(struct engine *engine) +{ + struct sysview_engine *sysview = (struct sysview_engine *)engine; + if (mempool_is_initialized(&sysview->iterator_pool)) + mempool_destroy(&sysview->iterator_pool); + free(engine); +} + +static struct space * +sysview_engine_create_space(struct engine *engine, struct space_def *def, + struct rlist *key_list) +{ + struct space *space = (struct space *)calloc(1, sizeof(*space)); + if (space == NULL) { + diag_set(OutOfMemory, sizeof(*space), + "malloc", "struct space"); + return NULL; + } + if (space_create(space, engine, &sysview_space_vtab, + def, key_list, NULL) != 0) { + free(space); + return NULL; + } + return space; +} + +static const struct engine_vtab sysview_engine_vtab = { + /* .shutdown = */ sysview_engine_shutdown, + /* .create_space = */ sysview_engine_create_space, + /* .join = */ generic_engine_join, + /* .begin = */ generic_engine_begin, + /* .begin_statement = */ generic_engine_begin_statement, + /* .prepare = */ generic_engine_prepare, + /* .commit = */ generic_engine_commit, + /* .rollback_statement = */ generic_engine_rollback_statement, + /* .rollback = */ generic_engine_rollback, + /* .bootstrap = */ generic_engine_bootstrap, + /* .begin_initial_recovery = */ generic_engine_begin_initial_recovery, + /* .begin_final_recovery = */ generic_engine_begin_final_recovery, + /* .end_recovery = */ generic_engine_end_recovery, + /* .begin_checkpoint = */ generic_engine_begin_checkpoint, + /* .wait_checkpoint = */ generic_engine_wait_checkpoint, + /* .commit_checkpoint = */ generic_engine_commit_checkpoint, + /* .abort_checkpoint = */ generic_engine_abort_checkpoint, + /* .collect_garbage = */ generic_engine_collect_garbage, + /* .backup = */ generic_engine_backup, + /* .memory_stat = */ generic_engine_memory_stat, + /* .reset_stat = */ generic_engine_reset_stat, + /* .check_space_def = */ generic_engine_check_space_def, +}; + +struct sysview_engine * +sysview_engine_new(void) +{ + struct sysview_engine *sysview = calloc(1, sizeof(*sysview)); + if (sysview == NULL) { + diag_set(OutOfMemory, sizeof(*sysview), + "malloc", "struct sysview_engine"); + return NULL; + } + + sysview->base.vtab = &sysview_engine_vtab; + sysview->base.name = "sysview"; + return sysview; } diff --git a/src/box/sysview_engine.h b/src/box/sysview.h similarity index 84% rename from src/box/sysview_engine.h rename to src/box/sysview.h index fd4ca351..e27ab05f 100644 --- a/src/box/sysview_engine.h +++ b/src/box/sysview.h @@ -1,5 +1,5 @@ -#ifndef TARANTOOL_BOX_SYSVIEW_ENGINE_H_INCLUDED -#define TARANTOOL_BOX_SYSVIEW_ENGINE_H_INCLUDED +#ifndef TARANTOOL_BOX_SYSVIEW_H_INCLUDED +#define TARANTOOL_BOX_SYSVIEW_H_INCLUDED /* * Copyright 2010-2016, Tarantool AUTHORS, please see AUTHORS file. * @@ -30,19 +30,13 @@ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#include <small/mempool.h> - -#include "engine.h" +#include <stddef.h> #if defined(__cplusplus) extern "C" { #endif /* defined(__cplusplus) */ -struct sysview_engine { - struct engine base; - /** Memory pool for index iterator. */ - struct mempool iterator_pool; -}; +struct sysview_engine; struct sysview_engine * sysview_engine_new(void); @@ -63,4 +57,4 @@ sysview_engine_new_xc(void) #endif /* defined(__plusplus) */ -#endif /* TARANTOOL_BOX_SYSVIEW_ENGINE_H_INCLUDED */ +#endif /* TARANTOOL_BOX_SYSVIEW_H_INCLUDED */ diff --git a/src/box/sysview_engine.c b/src/box/sysview_engine.c deleted file mode 100644 index f2f27381..00000000 --- a/src/box/sysview_engine.c +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright 2010-2016, Tarantool AUTHORS, please see AUTHORS file. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the - * following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * <COPYRIGHT HOLDER> OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF - * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#include "sysview_engine.h" -#include "sysview_index.h" -#include "schema.h" -#include "space.h" - -static void -sysview_space_destroy(struct space *space) -{ - free(space); -} - -static int -sysview_space_execute_replace(struct space *space, struct txn *txn, - struct request *request, struct tuple **result) -{ - (void)txn; - (void)request; - (void)result; - diag_set(ClientError, ER_VIEW_IS_RO, space->def->name); - return -1; -} - -static int -sysview_space_execute_delete(struct space *space, struct txn *txn, - struct request *request, struct tuple **result) -{ - (void)txn; - (void)request; - (void)result; - diag_set(ClientError, ER_VIEW_IS_RO, space->def->name); - return -1; -} - -static int -sysview_space_execute_update(struct space *space, struct txn *txn, - struct request *request, struct tuple **result) -{ - (void)txn; - (void)request; - (void)result; - diag_set(ClientError, ER_VIEW_IS_RO, space->def->name); - return -1; -} - -static int -sysview_space_execute_upsert(struct space *space, struct txn *txn, - struct request *request) -{ - (void)txn; - (void)request; - diag_set(ClientError, ER_VIEW_IS_RO, space->def->name); - return -1; -} - -static struct index * -sysview_space_create_index(struct space *space, struct index_def *index_def) -{ - struct sysview_engine *sysview = (struct sysview_engine *)space->engine; - return (struct index *)sysview_index_new(sysview, index_def, - space_name(space)); -} - -static const struct space_vtab sysview_space_vtab = { - /* .destroy = */ sysview_space_destroy, - /* .bsize = */ generic_space_bsize, - /* .apply_initial_join_row = */ generic_space_apply_initial_join_row, - /* .execute_replace = */ sysview_space_execute_replace, - /* .execute_delete = */ sysview_space_execute_delete, - /* .execute_update = */ sysview_space_execute_update, - /* .execute_upsert = */ sysview_space_execute_upsert, - /* .init_system_space = */ generic_init_system_space, - /* .check_index_def = */ generic_space_check_index_def, - /* .create_index = */ sysview_space_create_index, - /* .add_primary_key = */ generic_space_add_primary_key, - /* .drop_primary_key = */ generic_space_drop_primary_key, - /* .check_format = */ generic_space_check_format, - /* .build_index = */ generic_space_build_index, - /* .swap_index = */ generic_space_swap_index, - /* .prepare_alter = */ generic_space_prepare_alter, -}; - -static void -sysview_engine_shutdown(struct engine *engine) -{ - struct sysview_engine *sysview = (struct sysview_engine *)engine; - if (mempool_is_initialized(&sysview->iterator_pool)) - mempool_destroy(&sysview->iterator_pool); - free(engine); -} - -static struct space * -sysview_engine_create_space(struct engine *engine, struct space_def *def, - struct rlist *key_list) -{ - struct space *space = (struct space *)calloc(1, sizeof(*space)); - if (space == NULL) { - diag_set(OutOfMemory, sizeof(*space), - "malloc", "struct space"); - return NULL; - } - if (space_create(space, engine, &sysview_space_vtab, - def, key_list, NULL) != 0) { - free(space); - return NULL; - } - return space; -} - -static const struct engine_vtab sysview_engine_vtab = { - /* .shutdown = */ sysview_engine_shutdown, - /* .create_space = */ sysview_engine_create_space, - /* .join = */ generic_engine_join, - /* .begin = */ generic_engine_begin, - /* .begin_statement = */ generic_engine_begin_statement, - /* .prepare = */ generic_engine_prepare, - /* .commit = */ generic_engine_commit, - /* .rollback_statement = */ generic_engine_rollback_statement, - /* .rollback = */ generic_engine_rollback, - /* .bootstrap = */ generic_engine_bootstrap, - /* .begin_initial_recovery = */ generic_engine_begin_initial_recovery, - /* .begin_final_recovery = */ generic_engine_begin_final_recovery, - /* .end_recovery = */ generic_engine_end_recovery, - /* .begin_checkpoint = */ generic_engine_begin_checkpoint, - /* .wait_checkpoint = */ generic_engine_wait_checkpoint, - /* .commit_checkpoint = */ generic_engine_commit_checkpoint, - /* .abort_checkpoint = */ generic_engine_abort_checkpoint, - /* .collect_garbage = */ generic_engine_collect_garbage, - /* .backup = */ generic_engine_backup, - /* .memory_stat = */ generic_engine_memory_stat, - /* .reset_stat = */ generic_engine_reset_stat, - /* .check_space_def = */ generic_engine_check_space_def, -}; - -struct sysview_engine * -sysview_engine_new(void) -{ - struct sysview_engine *sysview = calloc(1, sizeof(*sysview)); - if (sysview == NULL) { - diag_set(OutOfMemory, sizeof(*sysview), - "malloc", "struct sysview_engine"); - return NULL; - } - - sysview->base.vtab = &sysview_engine_vtab; - sysview->base.name = "sysview"; - return sysview; -} diff --git a/src/box/sysview_index.h b/src/box/sysview_index.h deleted file mode 100644 index 74f57d4b..00000000 --- a/src/box/sysview_index.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef TARANTOOL_BOX_SYSVIEW_INDEX_H_INCLUDED -#define TARANTOOL_BOX_SYSVIEW_INDEX_H_INCLUDED -/* - * Copyright 2010-2016, Tarantool AUTHORS, please see AUTHORS file. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * 1. Redistributions of source code must retain the above - * copyright notice, this list of conditions and the - * following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * <COPYRIGHT HOLDER> OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF - * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#include "index.h" - -#if defined(__cplusplus) -extern "C" { -#endif /* defined(__cplusplus) */ - -struct space; -struct tuple; -struct sysview_engine; - -typedef bool (*sysview_filter_f)(struct space *source, struct tuple *); - -struct sysview_index { - struct index base; - uint32_t source_space_id; - uint32_t source_index_id; - sysview_filter_f filter; -}; - -struct sysview_index * -sysview_index_new(struct sysview_engine *sysview, - struct index_def *def, const char *space_name); - -#if defined(__cplusplus) -} /* extern "C" */ -#endif /* defined(__cplusplus) */ - -#endif /* TARANTOOL_BOX_SYSVIEW_INDEX_H_INCLUDED */ -- 2.11.0
next prev parent reply other threads:[~2018-07-20 17:43 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-07-20 17:43 [PATCH 0/6] Introduce blackhole engine Vladimir Davydov 2018-07-20 17:43 ` [PATCH 1/6] Add generic engine, space, index method stubs Vladimir Davydov 2018-07-20 17:56 ` Konstantin Osipov 2018-07-21 12:24 ` Vladimir Davydov 2018-07-20 17:43 ` Vladimir Davydov [this message] 2018-07-20 18:02 ` [PATCH 2/6] Merge sysview_index.[hc] and sysview_engine.[hc] Konstantin Osipov 2018-07-21 12:24 ` Vladimir Davydov 2018-07-20 17:43 ` [PATCH 3/6] Rework memtx replace function Vladimir Davydov 2018-07-20 18:04 ` Konstantin Osipov 2018-07-21 12:24 ` Vladimir Davydov 2018-07-20 17:43 ` [PATCH 4/6] txn: unify txn_stmt tuples reference counting rules Vladimir Davydov 2018-07-20 18:31 ` Konstantin Osipov 2018-07-21 12:24 ` Vladimir Davydov 2018-07-20 17:43 ` [PATCH 5/6] space: call before_replace trigger even if space has no indexes Vladimir Davydov 2018-07-20 18:39 ` Konstantin Osipov 2018-07-21 12:26 ` Vladimir Davydov 2018-07-21 20:59 ` Konstantin Osipov 2018-07-23 10:15 ` Vladimir Davydov 2018-07-20 17:43 ` [PATCH 6/6] Introduce blackhole engine Vladimir Davydov 2018-07-20 18:42 ` Konstantin Osipov 2018-07-21 12:35 ` Vladimir Davydov 2018-07-23 11:02 ` Vladimir Davydov 2018-07-23 12:53 ` Vladimir Davydov 2018-07-23 18:30 ` [PATCH 0/6] " Konstantin Osipov
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=4e8cd4e1c3a64080d61eda881e8401226cbc79b5.1532107326.git.vdavydov.dev@gmail.com \ --to=vdavydov.dev@gmail.com \ --cc=kostja@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='Re: [PATCH 2/6] Merge sysview_index.[hc] and sysview_engine.[hc]' \ /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