From d8faca69a6339d21e97ceee4def69082b9c0acba Mon Sep 17 00:00:00 2001
From: Sergey Bronnikov <sergeyb@tarantool.org>
Date: Fri, 14 Apr 2023 14:44:59 +0300
Subject: [PATCH] lua: implement stubs for etcd client

To enable etcd client set the following CMake variables:

 - ENABLE_ETCD_CLIENT: ON
 - ETCD_CLIENT_DIR: path to a directory with etcd client Lua source
   files

If ENABLE_ETCD_CLIENT is unset, then a stub implementation is built,
which spits an error on attempt require etcd-client.

Needed for https://github.com/tarantool/tarantool-ee/issues/443

MSG="stubs for enterprise version, no user-visible changes"

NO_CHANGELOG=MSG
NO_DOC=MSG
NO_TEST=MSG
---
 src/CMakeLists.txt        | 17 +++++++++++++++++
 src/lua/init.c            | 38 ++++++++++++++++++++++++++++++++++++++
 src/trivia/config.h.cmake |  1 +
 3 files changed, 56 insertions(+)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8f00d69170..bfa2ba999c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -73,6 +73,23 @@ lua_source(lua_sources lua/compat.lua compat_lua)
 if (ENABLE_COMPRESS_MODULE)
     lua_source(lua_sources ${COMPRESS_MODULE_LUA_SOURCE} compress_lua)
 endif()
+if (ENABLE_ETCD_CLIENT)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/client/auth_http.lua etcd_client_client_auth_http_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/client/http.lua etcd_client_client_http_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/client/jsstream.lua etcd_client_client_jsstream_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/client/pool.lua etcd_client_client_pool_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/error/etcd.lua etcd_client_error_etcd_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/error/http.lua etcd_client_error_http_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/grpc_json.lua etcd_client_grpc_json_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/init.lua etcd_client_init_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/math.lua etcd_client_math_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/protocol.lua etcd_client_protocol_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/subscribe/auto.lua etcd_client_subscribe_auto_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/subscribe/once.lua etcd_client_subscribe_once_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/txn.lua etcd_client_txn_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/utils.lua etcd_client_utils_lua)
+    lua_source(lua_sources ${ETCD_CLIENT_DIR}/etcd-client/version.lua etcd_client_version_lua)
+endif()
 
 # 3rd party lua sources
 lua_source(lua_sources ../third_party/luafun/fun.lua fun_lua)
diff --git a/src/lua/init.c b/src/lua/init.c
index aba0160d14..c2d5dd53ec 100644
--- a/src/lua/init.c
+++ b/src/lua/init.c
@@ -271,6 +271,23 @@ extern char minifio_lua[],
 	luarocks_util_lua[],
 	luarocks_core_util_lua[]
 #endif /* defined(EMBED_LUAROCKS) */
+#if ENABLE_ETCD_CLIENT
+	, etcd_client_client_auth_http_lua[],
+	etcd_client_client_http_lua[],
+	etcd_client_client_jsstream_lua[],
+	etcd_client_client_pool_lua[],
+	etcd_client_error_etcd_lua[],
+	etcd_client_error_http_lua[],
+	etcd_client_grpc_json_lua[],
+	etcd_client_init_lua[],
+	etcd_client_math_lua[],
+	etcd_client_protocol_lua[],
+	etcd_client_subscribe_auto_lua[],
+	etcd_client_subscribe_once_lua[],
+	etcd_client_txn_lua[],
+	etcd_client_utils_lua[],
+	etcd_client_version_lua[]
+#endif
 ;
 
 static const char *lua_modules[] = {
@@ -340,6 +357,27 @@ static const char *lua_modules[] = {
 	"internal.print", print_lua,
 	"internal.pairs", pairs_lua,
 	"luadebug", luadebug_lua,
+#if ENABLE_ETCD_CLIENT
+	/*
+	 * Module components order is important here: components that required
+	 * other modules must be loaded first.
+	 */
+	"etcd-client.version", etcd_client_version_lua,
+	"etcd-client.utils", etcd_client_utils_lua,
+	"etcd-client.math", etcd_client_math_lua,
+	"etcd-client.txn", etcd_client_txn_lua,
+	"etcd-client.grpc_json", etcd_client_grpc_json_lua,
+	"etcd-client.protocol", etcd_client_protocol_lua,
+	"etcd-client.subscribe.auto", etcd_client_subscribe_auto_lua,
+	"etcd-client.subscribe.once", etcd_client_subscribe_once_lua,
+	"etcd-client.error.etcd", etcd_client_error_etcd_lua,
+	"etcd-client.error.http", etcd_client_error_http_lua,
+	"etcd-client.client.pool", etcd_client_client_pool_lua,
+	"etcd-client.client.jsstream", etcd_client_client_jsstream_lua,
+	"etcd-client.client.http", etcd_client_client_http_lua,
+	"etcd-client.client.auth_http", etcd_client_client_auth_http_lua,
+	"etcd-client", etcd_client_init_lua,
+#endif
 	NULL
 };
 
diff --git a/src/trivia/config.h.cmake b/src/trivia/config.h.cmake
index 7c5c79e592..213c235e0a 100644
--- a/src/trivia/config.h.cmake
+++ b/src/trivia/config.h.cmake
@@ -291,6 +291,7 @@
 #cmakedefine ENABLE_READ_VIEW 1
 #cmakedefine ENABLE_SECURITY 1
 #cmakedefine ENABLE_COMPRESS_MODULE 1
+#cmakedefine ENABLE_ETCD_CLIENT 1
 
 #cmakedefine EXPORT_LIBCURL_SYMBOLS 1
 
-- 
GitLab