[tarantool-patches] [PATCH 1/6] Add generic engine, space, index method stubs

  • From: Vladimir Davydov <vdavydov.dev@xxxxxxxxx>
  • To: kostja@xxxxxxxxxxxxx
  • Date: Fri, 20 Jul 2018 20:43:30 +0300

This should reduce maintenance burden and help us introduce a new
engine.
---
 src/box/engine.c         | 161 ++++++++++++++++++++++++++
 src/box/engine.h         |  28 +++++
 src/box/index.cc         |  13 +++
 src/box/index.h          |   3 +
 src/box/memtx_engine.c   |  17 +--
 src/box/space.c          |  73 ++++++++++++
 src/box/space.h          |  14 +++
 src/box/sysview_engine.c | 287 +++++------------------------------------------
 src/box/sysview_index.c  |  20 +---
 src/box/vinyl.c          |  17 +--
 10 files changed, 327 insertions(+), 306 deletions(-)

diff --git a/src/box/engine.c b/src/box/engine.c
index 82293fd1..2a30dcdd 100644
--- a/src/box/engine.c
+++ b/src/box/engine.c
@@ -196,3 +196,164 @@ engine_reset_stat(void)
        engine_foreach(engine)
                engine->vtab->reset_stat(engine);
 }
+
+/* {{{ Virtual method stubs */
+
+int
+generic_engine_join(struct engine *engine, const struct vclock *vclock,
+                   struct xstream *stream)
+{
+       (void)engine;
+       (void)vclock;
+       (void)stream;
+       return 0;
+}
+
+int
+generic_engine_begin(struct engine *engine, struct txn *txn)
+{
+       (void)engine;
+       (void)txn;
+       return 0;
+}
+
+int
+generic_engine_begin_statement(struct engine *engine, struct txn *txn)
+{
+       (void)engine;
+       (void)txn;
+       return 0;
+}
+
+int
+generic_engine_prepare(struct engine *engine, struct txn *txn)
+{
+       (void)engine;
+       (void)txn;
+       return 0;
+}
+
+void
+generic_engine_commit(struct engine *engine, struct txn *txn)
+{
+       (void)engine;
+       (void)txn;
+}
+
+void
+generic_engine_rollback_statement(struct engine *engine, struct txn *txn,
+                                 struct txn_stmt *stmt)
+{
+       (void)engine;
+       (void)txn;
+       (void)stmt;
+}
+
+void
+generic_engine_rollback(struct engine *engine, struct txn *txn)
+{
+       (void)engine;
+       (void)txn;
+}
+
+int
+generic_engine_bootstrap(struct engine *engine)
+{
+       (void)engine;
+       return 0;
+}
+
+int
+generic_engine_begin_initial_recovery(struct engine *engine,
+                                     const struct vclock *vclock)
+{
+       (void)engine;
+       (void)vclock;
+       return 0;
+}
+
+int
+generic_engine_begin_final_recovery(struct engine *engine)
+{
+       (void)engine;
+       return 0;
+}
+
+int
+generic_engine_end_recovery(struct engine *engine)
+{
+       (void)engine;
+       return 0;
+}
+
+int
+generic_engine_begin_checkpoint(struct engine *engine)
+{
+       (void)engine;
+       return 0;
+}
+
+int
+generic_engine_wait_checkpoint(struct engine *engine,
+                              const struct vclock *vclock)
+{
+       (void)engine;
+       (void)vclock;
+       return 0;
+}
+
+void
+generic_engine_commit_checkpoint(struct engine *engine,
+                                const struct vclock *vclock)
+{
+       (void)engine;
+       (void)vclock;
+}
+
+void
+generic_engine_abort_checkpoint(struct engine *engine)
+{
+       (void)engine;
+}
+
+int
+generic_engine_collect_garbage(struct engine *engine, int64_t lsn)
+{
+       (void)engine;
+       (void)lsn;
+       return 0;
+}
+
+int
+generic_engine_backup(struct engine *engine, const struct vclock *vclock,
+                     engine_backup_cb cb, void *cb_arg)
+{
+       (void)engine;
+       (void)vclock;
+       (void)cb;
+       (void)cb_arg;
+       return 0;
+}
+
+void
+generic_engine_memory_stat(struct engine *engine,
+                          struct engine_memory_stat *stat)
+{
+       (void)engine;
+       (void)stat;
+}
+
+void
+generic_engine_reset_stat(struct engine *engine)
+{
+       (void)engine;
+}
+
+int
+generic_engine_check_space_def(struct space_def *def)
+{
+       (void)def;
+       return 0;
+}
+
+/* }}} */
diff --git a/src/box/engine.h b/src/box/engine.h
index 825f059e..e10eaec4 100644
--- a/src/box/engine.h
+++ b/src/box/engine.h
@@ -336,6 +336,34 @@ engine_memory_stat(struct engine_memory_stat *stat);
 void
 engine_reset_stat(void);
 
+/*
+ * Virtual method stubs.
+ */
+int generic_engine_join(struct engine *, const struct vclock *,
+                       struct xstream *);
+int generic_engine_begin(struct engine *, struct txn *);
+int generic_engine_begin_statement(struct engine *, struct txn *);
+int generic_engine_prepare(struct engine *, struct txn *);
+void generic_engine_commit(struct engine *, struct txn *);
+void generic_engine_rollback_statement(struct engine *, struct txn *,
+                                      struct txn_stmt *);
+void generic_engine_rollback(struct engine *, struct txn *);
+int generic_engine_bootstrap(struct engine *);
+int generic_engine_begin_initial_recovery(struct engine *,
+                                         const struct vclock *);
+int generic_engine_begin_final_recovery(struct engine *);
+int generic_engine_end_recovery(struct engine *);
+int generic_engine_begin_checkpoint(struct engine *);
+int generic_engine_wait_checkpoint(struct engine *, const struct vclock *);
+void generic_engine_commit_checkpoint(struct engine *, const struct vclock *);
+void generic_engine_abort_checkpoint(struct engine *);
+int generic_engine_collect_garbage(struct engine *, int64_t);
+int generic_engine_backup(struct engine *, const struct vclock *,
+                         engine_backup_cb, void *);
+void generic_engine_memory_stat(struct engine *, struct engine_memory_stat *);
+void generic_engine_reset_stat(struct engine *);
+int generic_engine_check_space_def(struct space_def *);
+
 #if defined(__cplusplus)
 } /* extern "C" */
 
diff --git a/src/box/index.cc b/src/box/index.cc
index 1e3f7afb..ea24b3aa 100644
--- a/src/box/index.cc
+++ b/src/box/index.cc
@@ -582,6 +582,13 @@ bool generic_index_depends_on_pk(struct index *)
        return false;
 }
 
+bool
+generic_index_def_change_requires_rebuild(struct index *,
+                                         const struct index_def *)
+{
+       return true;
+}
+
 ssize_t
 generic_index_size(struct index *index)
 {
@@ -589,6 +596,12 @@ generic_index_size(struct index *index)
        return -1;
 }
 
+ssize_t
+generic_index_bsize(struct index *)
+{
+       return 0;
+}
+
 int
 generic_index_min(struct index *index, const char *key,
                  uint32_t part_count, struct tuple **result)
diff --git a/src/box/index.h b/src/box/index.h
index 686e7a1a..0a1ac611 100644
--- a/src/box/index.h
+++ b/src/box/index.h
@@ -667,6 +667,9 @@ void generic_index_commit_modify(struct index *, int64_t);
 void generic_index_commit_drop(struct index *, int64_t);
 void generic_index_update_def(struct index *);
 bool generic_index_depends_on_pk(struct index *);
+bool generic_index_def_change_requires_rebuild(struct index *,
+                                              const struct index_def *);
+ssize_t generic_index_bsize(struct index *);
 ssize_t generic_index_size(struct index *);
 int generic_index_min(struct index *, const char *, uint32_t, struct tuple **);
 int generic_index_max(struct index *, const char *, uint32_t, struct tuple **);
diff --git a/src/box/memtx_engine.c b/src/box/memtx_engine.c
index c210afbe..a1ce4fff 100644
--- a/src/box/memtx_engine.c
+++ b/src/box/memtx_engine.c
@@ -966,19 +966,6 @@ memtx_engine_memory_stat(struct engine *engine, struct 
engine_memory_stat *stat)
        stat->index += index_stats.totals.used;
 }
 
-static void
-memtx_engine_reset_stat(struct engine *engine)
-{
-       (void)engine;
-}
-
-static int
-memtx_engine_check_space_def(struct space_def *def)
-{
-       (void)def;
-       return 0;
-}
-
 static const struct engine_vtab memtx_engine_vtab = {
        /* .shutdown = */ memtx_engine_shutdown,
        /* .create_space = */ memtx_engine_create_space,
@@ -1000,8 +987,8 @@ static const struct engine_vtab memtx_engine_vtab = {
        /* .collect_garbage = */ memtx_engine_collect_garbage,
        /* .backup = */ memtx_engine_backup,
        /* .memory_stat = */ memtx_engine_memory_stat,
-       /* .reset_stat = */ memtx_engine_reset_stat,
-       /* .check_space_def = */ memtx_engine_check_space_def,
+       /* .reset_stat = */ generic_engine_reset_stat,
+       /* .check_space_def = */ generic_engine_check_space_def,
 };
 
 /**
diff --git a/src/box/space.c b/src/box/space.c
index a325a42e..fc59dbe3 100644
--- a/src/box/space.c
+++ b/src/box/space.c
@@ -505,3 +505,76 @@ space_execute_dml(struct space *space, struct txn *txn,
        }
        return 0;
 }
+
+/* {{{ Virtual method stubs */
+
+size_t
+generic_space_bsize(struct space *space)
+{
+       (void)space;
+       return 0;
+}
+
+int
+generic_space_apply_initial_join_row(struct space *space,
+                                    struct request *request)
+{
+       (void)space;
+       (void)request;
+       return 0;
+}
+
+void
+generic_init_system_space(struct space *space)
+{
+       (void)space;
+}
+
+int
+generic_space_check_index_def(struct space *space, struct index_def *index_def)
+{
+       (void)space;
+       (void)index_def;
+       return 0;
+}
+
+int
+generic_space_add_primary_key(struct space *space)
+{
+       (void)space;
+       return 0;
+}
+
+void
+generic_space_drop_primary_key(struct space *space)
+{
+       (void)space;
+}
+
+int
+generic_space_check_format(struct space *space, struct tuple_format *format)
+{
+       (void)space;
+       (void)format;
+       return 0;
+}
+
+int
+generic_space_build_index(struct space *src_space, struct index *new_index,
+                         struct tuple_format *new_format)
+{
+       (void)src_space;
+       (void)new_index;
+       (void)new_format;
+       return 0;
+}
+
+int
+generic_space_prepare_alter(struct space *old_space, struct space *new_space)
+{
+       (void)old_space;
+       (void)new_space;
+       return 0;
+}
+
+/* }}} */
diff --git a/src/box/space.h b/src/box/space.h
index ae32e6df..8888ec80 100644
--- a/src/box/space.h
+++ b/src/box/space.h
@@ -398,6 +398,20 @@ space_dump_def(const struct space *space, struct rlist 
*key_list);
 void
 space_fill_index_map(struct space *space);
 
+/*
+ * Virtual method stubs.
+ */
+size_t generic_space_bsize(struct space *);
+int generic_space_apply_initial_join_row(struct space *, struct request *);
+void generic_init_system_space(struct space *);
+int generic_space_check_index_def(struct space *, struct index_def *);
+int generic_space_add_primary_key(struct space *space);
+void generic_space_drop_primary_key(struct space *space);
+int generic_space_check_format(struct space *, struct tuple_format *);
+int generic_space_build_index(struct space *, struct index *,
+                             struct tuple_format *);
+int generic_space_prepare_alter(struct space *, struct space *);
+
 #if defined(__cplusplus)
 } /* extern "C" */
 
diff --git a/src/box/sysview_engine.c b/src/box/sysview_engine.c
index 762bf93e..f2f27381 100644
--- a/src/box/sysview_engine.c
+++ b/src/box/sysview_engine.c
@@ -39,23 +39,6 @@ sysview_space_destroy(struct space *space)
        free(space);
 }
 
-static size_t
-sysview_space_bsize(struct space *space)
-{
-       (void)space;
-       return 0;
-}
-
-static int
-sysview_space_apply_initial_join_row(struct space *space,
-                                    struct request *request)
-{
-       (void)space;
-       (void)request;
-       unreachable();
-       return 0;
-}
-
 static int
 sysview_space_execute_replace(struct space *space, struct txn *txn,
                              struct request *request, struct tuple **result)
@@ -99,21 +82,6 @@ sysview_space_execute_upsert(struct space *space, struct txn 
*txn,
        return -1;
 }
 
-static void
-sysview_init_system_space(struct space *space)
-{
-       (void)space;
-       unreachable();
-}
-
-static int
-sysview_space_check_index_def(struct space *space, struct index_def *index_def)
-{
-       (void)space;
-       (void)index_def;
-       return 0;
-}
-
 static struct index *
 sysview_space_create_index(struct space *space, struct index_def *index_def)
 {
@@ -122,63 +90,23 @@ sysview_space_create_index(struct space *space, struct 
index_def *index_def)
                                                 space_name(space));
 }
 
-static int
-sysview_space_add_primary_key(struct space *space)
-{
-       (void)space;
-       return 0;
-}
-
-static void
-sysview_space_drop_primary_key(struct space *space)
-{
-       (void)space;
-}
-
-static int
-sysview_space_build_index(struct space *src_space, struct index *new_index,
-                         struct tuple_format *new_format)
-{
-       (void)src_space;
-       (void)new_index;
-       (void)new_format;
-       return 0;
-}
-
-static int
-sysview_space_prepare_alter(struct space *old_space, struct space *new_space)
-{
-       (void)old_space;
-       (void)new_space;
-       return 0;
-}
-
-static int
-sysview_space_check_format(struct space *space, struct tuple_format *format)
-{
-       (void)space;
-       (void)format;
-       unreachable();
-       return 0;
-}
-
 static const struct space_vtab sysview_space_vtab = {
        /* .destroy = */ sysview_space_destroy,
-       /* .bsize = */ sysview_space_bsize,
-       /* .apply_initial_join_row = */ sysview_space_apply_initial_join_row,
+       /* .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 = */ sysview_init_system_space,
-       /* .check_index_def = */ sysview_space_check_index_def,
+       /* .init_system_space = */ generic_init_system_space,
+       /* .check_index_def = */ generic_space_check_index_def,
        /* .create_index = */ sysview_space_create_index,
-       /* .add_primary_key = */ sysview_space_add_primary_key,
-       /* .drop_primary_key = */ sysview_space_drop_primary_key,
-       /* .check_format = */ sysview_space_check_format,
-       /* .build_index = */ sysview_space_build_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 = */ sysview_space_prepare_alter,
+       /* .prepare_alter = */ generic_space_prepare_alter,
 };
 
 static void
@@ -208,186 +136,29 @@ sysview_engine_create_space(struct engine *engine, 
struct space_def *def,
        return space;
 }
 
-static int
-sysview_engine_begin(struct engine *engine, struct txn *txn)
-{
-       (void)engine;
-       (void)txn;
-       return 0;
-}
-
-static int
-sysview_engine_begin_statement(struct engine *engine, struct txn *txn)
-{
-       (void)engine;
-       (void)txn;
-       return 0;
-}
-
-static int
-sysview_engine_prepare(struct engine *engine, struct txn *txn)
-{
-       (void)engine;
-       (void)txn;
-       return 0;
-}
-
-static void
-sysview_engine_commit(struct engine *engine, struct txn *txn)
-{
-       (void)engine;
-       (void)txn;
-}
-
-static void
-sysview_engine_rollback(struct engine *engine, struct txn *txn)
-{
-       (void)engine;
-       (void)txn;
-}
-
-static void
-sysview_engine_rollback_statement(struct engine *engine, struct txn *txn,
-                                 struct txn_stmt *stmt)
-{
-       (void)engine;
-       (void)txn;
-       (void)stmt;
-}
-
-static int
-sysview_engine_bootstrap(struct engine *engine)
-{
-       (void)engine;
-       return 0;
-}
-
-static int
-sysview_engine_begin_initial_recovery(struct engine *engine,
-                                     const struct vclock *vclock)
-{
-       (void)engine;
-       (void)vclock;
-       return 0;
-}
-
-static int
-sysview_engine_begin_final_recovery(struct engine *engine)
-{
-       (void)engine;
-       return 0;
-}
-
-static int
-sysview_engine_end_recovery(struct engine *engine)
-{
-       (void)engine;
-       return 0;
-}
-
-static int
-sysview_engine_join(struct engine *engine, const struct vclock *vclock,
-                   struct xstream *stream)
-{
-       (void)engine;
-       (void)vclock;
-       (void)stream;
-       return 0;
-}
-
-static int
-sysview_engine_begin_checkpoint(struct engine *engine)
-{
-       (void)engine;
-       return 0;
-}
-
-static int
-sysview_engine_wait_checkpoint(struct engine *engine,
-                              const struct vclock *vclock)
-{
-       (void)engine;
-       (void)vclock;
-       return 0;
-}
-
-static void
-sysview_engine_commit_checkpoint(struct engine *engine,
-                                const struct vclock *vclock)
-{
-       (void)engine;
-       (void)vclock;
-}
-
-static void
-sysview_engine_abort_checkpoint(struct engine *engine)
-{
-       (void)engine;
-}
-
-static int
-sysview_engine_collect_garbage(struct engine *engine, int64_t lsn)
-{
-       (void)engine;
-       (void)lsn;
-       return 0;
-}
-
-static int
-sysview_engine_backup(struct engine *engine, const struct vclock *vclock,
-                     engine_backup_cb cb, void *cb_arg)
-{
-       (void)engine;
-       (void)vclock;
-       (void)cb;
-       (void)cb_arg;
-       return 0;
-}
-
-static void
-sysview_engine_memory_stat(struct engine *engine,
-                          struct engine_memory_stat *stat)
-{
-       (void)engine;
-       (void)stat;
-}
-
-static void
-sysview_engine_reset_stat(struct engine *engine)
-{
-       (void)engine;
-}
-
-static int
-sysview_engine_check_space_def(struct space_def *def)
-{
-       (void)def;
-       return 0;
-}
-
 static const struct engine_vtab sysview_engine_vtab = {
        /* .shutdown = */ sysview_engine_shutdown,
        /* .create_space = */ sysview_engine_create_space,
-       /* .join = */ sysview_engine_join,
-       /* .begin = */ sysview_engine_begin,
-       /* .begin_statement = */ sysview_engine_begin_statement,
-       /* .prepare = */ sysview_engine_prepare,
-       /* .commit = */ sysview_engine_commit,
-       /* .rollback_statement = */ sysview_engine_rollback_statement,
-       /* .rollback = */ sysview_engine_rollback,
-       /* .bootstrap = */ sysview_engine_bootstrap,
-       /* .begin_initial_recovery = */ sysview_engine_begin_initial_recovery,
-       /* .begin_final_recovery = */ sysview_engine_begin_final_recovery,
-       /* .end_recovery = */ sysview_engine_end_recovery,
-       /* .begin_checkpoint = */ sysview_engine_begin_checkpoint,
-       /* .wait_checkpoint = */ sysview_engine_wait_checkpoint,
-       /* .commit_checkpoint = */ sysview_engine_commit_checkpoint,
-       /* .abort_checkpoint = */ sysview_engine_abort_checkpoint,
-       /* .collect_garbage = */ sysview_engine_collect_garbage,
-       /* .backup = */ sysview_engine_backup,
-       /* .memory_stat = */ sysview_engine_memory_stat,
-       /* .reset_stat = */ sysview_engine_reset_stat,
-       /* .check_space_def = */ sysview_engine_check_space_def,
+       /* .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 *
diff --git a/src/box/sysview_index.c b/src/box/sysview_index.c
index 5e3d8423..309618ca 100644
--- a/src/box/sysview_index.c
+++ b/src/box/sysview_index.c
@@ -84,22 +84,6 @@ sysview_index_destroy(struct index *index)
        free(index);
 }
 
-static ssize_t
-sysview_index_bsize(struct index *index)
-{
-       (void)index;
-       return 0;
-}
-
-static bool
-sysview_index_def_change_requires_rebuild(struct index *index,
-                                         const struct index_def *new_def)
-{
-       (void)index;
-       (void)new_def;
-       return true;
-}
-
 static struct iterator *
 sysview_index_create_iterator(struct index *base, enum iterator_type type,
                              const char *key, uint32_t part_count)
@@ -177,9 +161,9 @@ static const struct index_vtab sysview_index_vtab = {
        /* .update_def = */ generic_index_update_def,
        /* .depends_on_pk = */ generic_index_depends_on_pk,
        /* .def_change_requires_rebuild = */
-               sysview_index_def_change_requires_rebuild,
+               generic_index_def_change_requires_rebuild,
        /* .size = */ generic_index_size,
-       /* .bsize = */ sysview_index_bsize,
+       /* .bsize = */ generic_index_bsize,
        /* .min = */ generic_index_min,
        /* .max = */ generic_index_max,
        /* .random = */ generic_index_random,
diff --git a/src/box/vinyl.c b/src/box/vinyl.c
index a802b169..f02fa638 100644
--- a/src/box/vinyl.c
+++ b/src/box/vinyl.c
@@ -1002,13 +1002,6 @@ vinyl_index_def_change_requires_rebuild(struct index 
*index,
        return false;
 }
 
-static void
-vinyl_init_system_space(struct space *space)
-{
-       (void)space;
-       unreachable();
-}
-
 static int
 vinyl_space_prepare_alter(struct space *old_space, struct space *new_space)
 {
@@ -1159,12 +1152,6 @@ vinyl_space_add_primary_key(struct space *space)
        return vinyl_index_open(space->index[0]);
 }
 
-static void
-vinyl_space_drop_primary_key(struct space *space)
-{
-       (void)space;
-}
-
 static size_t
 vinyl_space_bsize(struct space *space)
 {
@@ -4488,11 +4475,11 @@ static const struct space_vtab vinyl_space_vtab = {
        /* .execute_delete = */ vinyl_space_execute_delete,
        /* .execute_update = */ vinyl_space_execute_update,
        /* .execute_upsert = */ vinyl_space_execute_upsert,
-       /* .init_system_space = */ vinyl_init_system_space,
+       /* .init_system_space = */ generic_init_system_space,
        /* .check_index_def = */ vinyl_space_check_index_def,
        /* .create_index = */ vinyl_space_create_index,
        /* .add_primary_key = */ vinyl_space_add_primary_key,
-       /* .drop_primary_key = */ vinyl_space_drop_primary_key,
+       /* .drop_primary_key = */ generic_space_drop_primary_key,
        /* .check_format = */ vinyl_space_check_format,
        /* .build_index = */ vinyl_space_build_index,
        /* .swap_index = */ vinyl_space_swap_index,
-- 
2.11.0


Other related posts: