[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