diff --git a/CMakeLists.txt b/CMakeLists.txt index 10dc97edc..4382ad713 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ option(HAVE_ASSERT_PANIC "assert_panic disabled by default" OFF) option(HAVE_LOGGING "logging enabled by default" ON) option(HAVE_STATS "stats enabled by default" ON) option(TARGET_PINGSERVER "build pingserver binary" ON) +option(TARGET_PUBSUB "build pubsub binary" ON) option(TARGET_SLIMCACHE "build slimcache binary" ON) option(TARGET_TWEMCACHE "build twemcache binary" ON) option(COVERAGE "code coverage" OFF) diff --git a/config/pubsub.conf b/config/pubsub.conf new file mode 100644 index 000000000..b0c646850 --- /dev/null +++ b/config/pubsub.conf @@ -0,0 +1,3 @@ +debug_log_level: 6 +# debug_log_file: pubsub.log +# debug_log_nbuf: 16384 diff --git a/src/core/context.h b/src/core/context.h index f3d215eb4..4d705bec4 100644 --- a/src/core/context.h +++ b/src/core/context.h @@ -12,5 +12,6 @@ struct context { }; bool admin_init; +bool pubsub_init; bool server_init; bool worker_init; diff --git a/src/core/core.c b/src/core/core.c index a4ea7433b..90b01ea72 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -10,7 +10,7 @@ #include void -core_run(void *arg_worker) +worker_run(void *arg_worker) { pthread_t worker, server; int ret; @@ -37,3 +37,32 @@ core_run(void *arg_worker) error: exit(EX_OSERR); } + +void +pubsub_run(void *arg_pubsub) +{ + pthread_t pubsub, server; + int ret; + + if (!admin_init || !server_init || !pubsub_init) { + log_crit("cannot run: admin/server/pubsub have to be initialized"); + return; + } + + ret = pthread_create(&pubsub, NULL, core_pubsub_evloop, arg_pubsub); + if (ret != 0) { + log_crit("pthread create failed for pubsub thread: %s", strerror(ret)); + goto error; + } + + ret = pthread_create(&server, NULL, core_server_evloop, NULL); + if (ret != 0) { + log_crit("pthread create failed for server thread: %s", strerror(ret)); + goto error; + } + + core_admin_evloop(); + +error: + exit(EX_OSERR); +} diff --git a/src/core/core.h b/src/core/core.h index c05542c13..ce8ec3f7b 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -5,8 +5,10 @@ */ #include "admin/admin.h" +#include "data/pubsub.h" #include "data/shared.h" #include "data/server.h" #include "data/worker.h" -void core_run(void *arg_worker); +void worker_run(void *arg_worker); +void pubsub_run(void *arg_pubsub); diff --git a/src/core/data/CMakeLists.txt b/src/core/data/CMakeLists.txt index 8b3b8afbe..061e06c68 100644 --- a/src/core/data/CMakeLists.txt +++ b/src/core/data/CMakeLists.txt @@ -1,5 +1,6 @@ set(SOURCE ${SOURCE} + ${CMAKE_CURRENT_SOURCE_DIR}/pubsub.c ${CMAKE_CURRENT_SOURCE_DIR}/server.c ${CMAKE_CURRENT_SOURCE_DIR}/worker.c PARENT_SCOPE) diff --git a/src/core/data/pubsub.c b/src/core/data/pubsub.c new file mode 100644 index 000000000..2f77d0e88 --- /dev/null +++ b/src/core/data/pubsub.c @@ -0,0 +1,302 @@ +#include "pubsub.h" + +#include "shared.h" + +#include