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

Vladimir Davydov vdavydov.dev at gmail.com
Fri Jul 20 20:43:30 MSK 2018


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




More information about the Tarantool-patches mailing list