From 99fca366ef139b841de48e52632b9ff45d10024e Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko Date: Fri, 2 Mar 2018 16:12:32 +0300 Subject: [PATCH] odissey: rename periodic service to cron --- INTERNALS.md | 12 +++---- sources/CMakeLists.txt | 2 +- sources/{periodic.c => cron.c} | 66 +++++++++++++++++----------------- sources/cron.h | 20 +++++++++++ sources/instance.c | 8 ++--- sources/periodic.h | 19 ---------- sources/pooler.c | 8 ++--- sources/route.h | 8 ++--- sources/route_pool.c | 16 ++++----- sources/router.c | 2 +- sources/system.h | 2 +- 11 files changed, 82 insertions(+), 81 deletions(-) rename sources/{periodic.c => cron.c} (82%) create mode 100644 sources/cron.h delete mode 100644 sources/periodic.h diff --git a/INTERNALS.md b/INTERNALS.md index 4b4138b8..b557fd90 100644 --- a/INTERNALS.md +++ b/INTERNALS.md @@ -36,9 +36,9 @@ Repository: [github/shapito](https://github.yandex-team.ru/pmwkaa/shapito). .--------. .---------. .---------. .---------. | router | | servers | | worker0 | ... | workerN | '--------' '---------' '---------' '---------' - .---------. .----------. thread thread - | console | | periodic | - '---------' '----------' + .---------. .------. thread thread + | console | | cron | + '---------' '------' ``` #### Instance @@ -52,7 +52,7 @@ Run pooler and worker\_pool threads. #### Pooler -Start router, periodic and console subsystems. +Start router, cron and console subsystems. Create listen server one for each resolved address. Each listen server runs inside own coroutine. Server coroutine mostly waits on `machine_accept()`. @@ -76,12 +76,12 @@ router and waits for reply. Could be a potential hot spot (not an issue at the m [sources/router.h](sources/router.h), [sources/router.c](sources/router.c) -#### Periodic +#### Cron Do periodic service tasks, like idle server connection expiration and database scheme obsoletion. -[sources/periodic.h](sources/periodic.h), [sources/periodic.c](sources/periodic.c) +[sources/cron.h](sources/cron.h), [sources/cron.c](sources/cron.c) #### Worker and worker pool diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index ba9e385b..2cf2625a 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -24,7 +24,7 @@ set(od_src auth.c auth_query.c cancel.c - periodic.c + cron.c tls.c main.c ) diff --git a/sources/periodic.c b/sources/cron.c similarity index 82% rename from sources/periodic.c rename to sources/cron.c index a555e450..4eb54044 100644 --- a/sources/periodic.c +++ b/sources/cron.c @@ -46,10 +46,10 @@ #include "sources/worker.h" #include "sources/frontend.h" #include "sources/backend.h" -#include "sources/periodic.h" +#include "sources/cron.h" static inline int -od_periodic_stats_server(od_server_t *server, void *arg) +od_cron_stats_server(od_server_t *server, void *arg) { od_serverstat_t *stats = arg; stats->query_time += od_atomic_u64_of(&server->stats.query_time); @@ -60,7 +60,7 @@ od_periodic_stats_server(od_server_t *server, void *arg) } static inline void -od_periodic_stats(od_router_t *router) +od_cron_stats(od_router_t *router) { od_instance_t *instance = router->system->instance; @@ -104,10 +104,10 @@ od_periodic_stats(od_router_t *router) memset(&stats, 0, sizeof(stats)); od_serverpool_foreach(&route->server_pool, OD_SACTIVE, - od_periodic_stats_server, + od_cron_stats_server, &stats); od_serverpool_foreach(&route->server_pool, OD_SIDLE, - od_periodic_stats_server, + od_cron_stats_server, &stats); /* calculate average between previous sample and the @@ -120,13 +120,13 @@ od_periodic_stats(od_router_t *router) /* ensure server stats not changed due to a * server connection close */ int64_t reqs_diff_sanity; - reqs_diff_sanity = (stats.count_request - route->periodic_stats.count_request); + reqs_diff_sanity = (stats.count_request - route->cron_stats.count_request); if (reqs_diff_sanity >= 0) { /* request count */ uint64_t reqs_prev = 0; - reqs_prev = route->periodic_stats.count_request / + reqs_prev = route->cron_stats.count_request / instance->scheme.stats_interval; uint64_t reqs_current = 0; @@ -140,7 +140,7 @@ od_periodic_stats(od_router_t *router) /* recv client */ uint64_t recv_client_prev = 0; - recv_client_prev = route->periodic_stats.recv_client / + recv_client_prev = route->cron_stats.recv_client / instance->scheme.stats_interval; uint64_t recv_client_current = 0; @@ -152,7 +152,7 @@ od_periodic_stats(od_router_t *router) /* recv server */ uint64_t recv_server_prev = 0; - recv_server_prev = route->periodic_stats.recv_server / + recv_server_prev = route->cron_stats.recv_server / instance->scheme.stats_interval; uint64_t recv_server_current = 0; @@ -164,17 +164,17 @@ od_periodic_stats(od_router_t *router) /* query time */ if (reqs_diff > 0) - query_time = (stats.query_time - route->periodic_stats.query_time) / + query_time = (stats.query_time - route->cron_stats.query_time) / reqs_diff; } /* update stats */ - route->periodic_stats = stats; + route->cron_stats = stats; - route->periodic_stats_avg.count_request = reqs; - route->periodic_stats_avg.recv_client = recv_client; - route->periodic_stats_avg.recv_server = recv_server; - route->periodic_stats_avg.query_time = query_time; + route->cron_stats_avg.count_request = reqs; + route->cron_stats_avg.recv_client = recv_client; + route->cron_stats_avg.recv_server = recv_server; + route->cron_stats_avg.query_time = query_time; if (instance->scheme.log_stats) { od_log(&instance->logger, "stats", NULL, NULL, @@ -203,7 +203,7 @@ od_periodic_stats(od_router_t *router) } static inline int -od_periodic_expire_mark(od_server_t *server, void *arg) +od_cron_expire_mark(od_server_t *server, void *arg) { od_router_t *router = arg; od_instance_t *instance = router->system->instance; @@ -236,10 +236,10 @@ od_periodic_expire_mark(od_server_t *server, void *arg) } static inline void -od_periodic_expire(od_periodic_t *periodic) +od_cron_expire(od_cron_t *cron) { - od_router_t *router = periodic->system->router; - od_instance_t *instance = periodic->system->instance; + od_router_t *router = cron->system->router; + od_instance_t *instance = cron->system->instance; /* Idle servers expire. * @@ -264,7 +264,7 @@ od_periodic_expire(od_periodic_t *periodic) /* mark */ od_routepool_server_foreach(&router->route_pool, OD_SIDLE, - od_periodic_expire_mark, + od_cron_expire_mark, router); /* sweep */ @@ -295,21 +295,21 @@ od_periodic_expire(od_periodic_t *periodic) } static void -od_periodic(void *arg) +od_cron(void *arg) { - od_periodic_t *periodic = arg; - od_router_t *router = periodic->system->router; - od_instance_t *instance = periodic->system->instance; + od_cron_t *cron = arg; + od_router_t *router = cron->system->router; + od_instance_t *instance = cron->system->instance; int stats_tick = 0; for (;;) { /* mark and sweep expired idle server connections */ - od_periodic_expire(periodic); + od_cron_expire(cron); /* update stats */ if (++stats_tick >= instance->scheme.stats_interval) { - od_periodic_stats(router); + od_cron_stats(router); stats_tick = 0; } @@ -318,19 +318,19 @@ od_periodic(void *arg) } } -void od_periodic_init(od_periodic_t *periodic, od_system_t *system) +void od_cron_init(od_cron_t *cron, od_system_t *system) { - periodic->system = system; + cron->system = system; } -int od_periodic_start(od_periodic_t *periodic) +int od_cron_start(od_cron_t *cron) { - od_instance_t *instance = periodic->system->instance; + od_instance_t *instance = cron->system->instance; int64_t coroutine_id; - coroutine_id = machine_coroutine_create(od_periodic, periodic); + coroutine_id = machine_coroutine_create(od_cron, cron); if (coroutine_id == -1) { - od_error(&instance->logger, "periodic", NULL, NULL, - "failed to start periodic coroutine"); + od_error(&instance->logger, "cron", NULL, NULL, + "failed to start cron coroutine"); return -1; } return 0; diff --git a/sources/cron.h b/sources/cron.h new file mode 100644 index 00000000..d2b981d1 --- /dev/null +++ b/sources/cron.h @@ -0,0 +1,20 @@ +#ifndef OD_CRON_H +#define OD_CRON_H + +/* + * Odissey. + * + * Advanced PostgreSQL connection pooler. +*/ + +typedef struct od_cron od_cron_t; + +struct od_cron +{ + od_system_t *system; +}; + +void od_cron_init(od_cron_t*, od_system_t*); +int od_cron_start(od_cron_t*); + +#endif /* OD_CRON_H */ diff --git a/sources/instance.c b/sources/instance.c index a99ba35f..dfb5f346 100644 --- a/sources/instance.c +++ b/sources/instance.c @@ -44,7 +44,7 @@ #include "sources/router.h" #include "sources/console.h" #include "sources/pooler.h" -#include "sources/periodic.h" +#include "sources/cron.h" #include "sources/worker.h" #include "sources/worker_pool.h" #include "sources/frontend.h" @@ -198,7 +198,7 @@ int od_instance_main(od_instance_t *instance, int argc, char **argv) od_router_t router; od_console_t console; - od_periodic_t periodic; + od_cron_t cron; od_workerpool_t worker_pool; od_system_t *system; @@ -207,12 +207,12 @@ int od_instance_main(od_instance_t *instance, int argc, char **argv) system->pooler = &pooler; system->router = &router; system->console = &console; - system->periodic = &periodic; + system->cron = &cron; system->worker_pool = &worker_pool; od_router_init(&router, system); od_console_init(&console, system); - od_periodic_init(&periodic, system); + od_cron_init(&cron, system); od_workerpool_init(&worker_pool); /* start pooler machine thread */ diff --git a/sources/periodic.h b/sources/periodic.h deleted file mode 100644 index 5623e791..00000000 --- a/sources/periodic.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef OD_PERIODIC_H -#define OD_PERIODIC_H - -/* - * Odissey. - * - * Advanced PostgreSQL connection pooler. -*/ - -typedef struct od_periodic_t od_periodic_t; - -struct od_periodic_t { - od_system_t *system; -}; - -void od_periodic_init(od_periodic_t*, od_system_t*); -int od_periodic_start(od_periodic_t*); - -#endif /* OD_PERIODIC_H */ diff --git a/sources/pooler.c b/sources/pooler.c index 3bfd1010..c8caa7cf 100644 --- a/sources/pooler.c +++ b/sources/pooler.c @@ -48,7 +48,7 @@ #include "sources/worker.h" #include "sources/worker_pool.h" #include "sources/pooler.h" -#include "sources/periodic.h" +#include "sources/cron.h" #include "sources/tls.h" static inline void @@ -353,9 +353,9 @@ od_pooler(void *arg) if (rc == -1) return; - /* start periodic coroutine */ - od_periodic_t *periodic = pooler->system.periodic; - rc = od_periodic_start(periodic); + /* start cron coroutine */ + od_cron_t *cron = pooler->system.cron; + rc = od_cron_start(cron); if (rc == -1) return; diff --git a/sources/route.h b/sources/route.h index cd44d43e..d3a5cb4c 100644 --- a/sources/route.h +++ b/sources/route.h @@ -13,8 +13,8 @@ struct od_route { od_schemeroute_t *scheme; od_routeid_t id; - od_serverstat_t periodic_stats; - od_serverstat_t periodic_stats_avg; + od_serverstat_t cron_stats; + od_serverstat_t cron_stats_avg; int stats_mark; od_serverpool_t server_pool; od_clientpool_t client_pool; @@ -29,8 +29,8 @@ od_route_init(od_route_t *route) od_serverpool_init(&route->server_pool); od_clientpool_init(&route->client_pool); route->stats_mark = 0; - memset(&route->periodic_stats, 0, sizeof(route->periodic_stats)); - memset(&route->periodic_stats_avg, 0, sizeof(route->periodic_stats_avg)); + memset(&route->cron_stats, 0, sizeof(route->cron_stats)); + memset(&route->cron_stats_avg, 0, sizeof(route->cron_stats_avg)); od_list_init(&route->link); } diff --git a/sources/route_pool.c b/sources/route_pool.c index eb5b8628..c8ca1ffb 100644 --- a/sources/route_pool.c +++ b/sources/route_pool.c @@ -188,15 +188,15 @@ od_routepool_stats_mark(od_routepool_t *pool, if (memcmp(route->id.database, database, database_len) != 0) continue; - total->count_request += route->periodic_stats.count_request; - total->query_time += route->periodic_stats.query_time; - total->recv_client += route->periodic_stats.recv_client; - total->recv_server += route->periodic_stats.recv_server; + total->count_request += route->cron_stats.count_request; + total->query_time += route->cron_stats.query_time; + total->recv_client += route->cron_stats.recv_client; + total->recv_server += route->cron_stats.recv_server; - avg->count_request += route->periodic_stats_avg.count_request; - avg->query_time += route->periodic_stats_avg.query_time; - avg->recv_client += route->periodic_stats_avg.recv_client; - avg->recv_server += route->periodic_stats_avg.recv_server; + avg->count_request += route->cron_stats_avg.count_request; + avg->query_time += route->cron_stats_avg.query_time; + avg->recv_client += route->cron_stats_avg.recv_client; + avg->recv_server += route->cron_stats_avg.recv_server; route->stats_mark++; match++; diff --git a/sources/router.c b/sources/router.c index bbb03487..6e5c9e9c 100644 --- a/sources/router.c +++ b/sources/router.c @@ -47,7 +47,7 @@ #include "sources/frontend.h" #include "sources/backend.h" #include "sources/cancel.h" -#include "sources/periodic.h" +#include "sources/cron.h" typedef struct { diff --git a/sources/system.h b/sources/system.h index fd5dd3e3..c782c409 100644 --- a/sources/system.h +++ b/sources/system.h @@ -15,7 +15,7 @@ struct od_system void *pooler; void *router; void *console; - void *periodic; + void *cron; void *worker_pool; };