From 046e353e128372f846c432a90ca9401506d37d5b Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 13 May 2023 14:24:36 +0200 Subject: ci_queue -> run_queue Also, some minor refactoring. --- src/CMakeLists.txt | 2 +- src/ci_queue.c | 110 ----------------------------------------------------- src/ci_queue.h | 33 ---------------- src/const.h | 2 +- src/run_queue.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/run_queue.h | 33 ++++++++++++++++ src/server.c | 41 ++++++++++---------- src/server.h | 6 --- src/server_main.c | 1 + src/worker.c | 2 +- 10 files changed, 168 insertions(+), 172 deletions(-) delete mode 100644 src/ci_queue.c delete mode 100644 src/ci_queue.h create mode 100644 src/run_queue.c create mode 100644 src/run_queue.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9174061..f8b2a7c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -37,12 +37,12 @@ endfunction() generate_sql_header(sqlite) add_my_executable(server server_main.c server.c - ci_queue.c cmd_line.c command.c file.c msg.c net.c + run_queue.c signal.c sql/sqlite_sql.h sqlite.c diff --git a/src/ci_queue.c b/src/ci_queue.c deleted file mode 100644 index 0928ff9..0000000 --- a/src/ci_queue.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2022 Egor Tensin - * This file is part of the "cimple" project. - * For details, see https://github.com/egor-tensin/cimple. - * Distributed under the MIT License. - */ - -#include "ci_queue.h" -#include "log.h" - -#include -#include -#include - -struct ci_queue_entry { - char *url; - char *rev; - STAILQ_ENTRY(ci_queue_entry) entries; -}; - -int ci_queue_entry_create(struct ci_queue_entry **_entry, const char *_url, const char *_rev) -{ - struct ci_queue_entry *entry = malloc(sizeof(struct ci_queue_entry)); - if (!entry) { - log_errno("malloc"); - goto fail; - } - - char *url = strdup(_url); - if (!url) { - log_errno("strdup"); - goto free_entry; - } - - char *rev = strdup(_rev); - if (!rev) { - log_errno("strdup"); - goto free_url; - } - - entry->url = url; - entry->rev = rev; - - *_entry = entry; - return 0; - -free_url: - free(url); - -free_entry: - free(entry); - -fail: - return -1; -} - -void ci_queue_entry_destroy(struct ci_queue_entry *entry) -{ - free(entry->rev); - free(entry->url); - free(entry); -} - -const char *ci_queue_entry_get_url(const struct ci_queue_entry *entry) -{ - return entry->url; -} - -const char *ci_queue_entry_get_rev(const struct ci_queue_entry *entry) -{ - return entry->rev; -} - -void ci_queue_create(struct ci_queue *queue) -{ - STAILQ_INIT(queue); -} - -void ci_queue_destroy(struct ci_queue *queue) -{ - struct ci_queue_entry *entry1 = STAILQ_FIRST(queue); - while (entry1) { - struct ci_queue_entry *entry2 = STAILQ_NEXT(entry1, entries); - ci_queue_entry_destroy(entry1); - entry1 = entry2; - } - STAILQ_INIT(queue); -} - -int ci_queue_is_empty(const struct ci_queue *queue) -{ - return STAILQ_EMPTY(queue); -} - -void ci_queue_add_last(struct ci_queue *queue, struct ci_queue_entry *entry) -{ - STAILQ_INSERT_TAIL(queue, entry, entries); -} - -void ci_queue_add_first(struct ci_queue *queue, struct ci_queue_entry *entry) -{ - STAILQ_INSERT_HEAD(queue, entry, entries); -} - -struct ci_queue_entry *ci_queue_remove_first(struct ci_queue *queue) -{ - struct ci_queue_entry *entry = STAILQ_FIRST(queue); - STAILQ_REMOVE_HEAD(queue, entries); - return entry; -} diff --git a/src/ci_queue.h b/src/ci_queue.h deleted file mode 100644 index a0e8ce5..0000000 --- a/src/ci_queue.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2022 Egor Tensin - * This file is part of the "cimple" project. - * For details, see https://github.com/egor-tensin/cimple. - * Distributed under the MIT License. - */ - -#ifndef __CI_QUEUE_H__ -#define __CI_QUEUE_H__ - -#include - -struct ci_queue_entry; - -int ci_queue_entry_create(struct ci_queue_entry **, const char *url, const char *rev); -void ci_queue_entry_destroy(struct ci_queue_entry *); - -const char *ci_queue_entry_get_url(const struct ci_queue_entry *); -const char *ci_queue_entry_get_rev(const struct ci_queue_entry *); - -STAILQ_HEAD(ci_queue, ci_queue_entry); - -void ci_queue_create(struct ci_queue *); -void ci_queue_destroy(struct ci_queue *); - -int ci_queue_is_empty(const struct ci_queue *); - -void ci_queue_add_first(struct ci_queue *, struct ci_queue_entry *); -void ci_queue_add_last(struct ci_queue *, struct ci_queue_entry *); - -struct ci_queue_entry *ci_queue_remove_first(struct ci_queue *); - -#endif diff --git a/src/const.h b/src/const.h index c762dbe..f53ef7e 100644 --- a/src/const.h +++ b/src/const.h @@ -14,7 +14,7 @@ #define DEFAULT_PORT "5556" #define DEFAULT_SQLITE_PATH "/var/lib/cimple/cimple.sqlite" -#define CMD_CI_RUN "run" +#define CMD_RUN "run" #define CMD_NEW_WORKER "new-worker" #endif diff --git a/src/run_queue.c b/src/run_queue.c new file mode 100644 index 0000000..8b5052b --- /dev/null +++ b/src/run_queue.c @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2022 Egor Tensin + * This file is part of the "cimple" project. + * For details, see https://github.com/egor-tensin/cimple. + * Distributed under the MIT License. + */ + +#include "run_queue.h" +#include "log.h" + +#include +#include +#include + +struct run_queue_entry { + char *url; + char *rev; + STAILQ_ENTRY(run_queue_entry) entries; +}; + +int run_queue_entry_create(struct run_queue_entry **_entry, const char *_url, const char *_rev) +{ + struct run_queue_entry *entry = malloc(sizeof(struct run_queue_entry)); + if (!entry) { + log_errno("malloc"); + goto fail; + } + + char *url = strdup(_url); + if (!url) { + log_errno("strdup"); + goto free_entry; + } + + char *rev = strdup(_rev); + if (!rev) { + log_errno("strdup"); + goto free_url; + } + + entry->url = url; + entry->rev = rev; + + *_entry = entry; + return 0; + +free_url: + free(url); + +free_entry: + free(entry); + +fail: + return -1; +} + +void run_queue_entry_destroy(struct run_queue_entry *entry) +{ + free(entry->rev); + free(entry->url); + free(entry); +} + +const char *run_queue_entry_get_url(const struct run_queue_entry *entry) +{ + return entry->url; +} + +const char *run_queue_entry_get_rev(const struct run_queue_entry *entry) +{ + return entry->rev; +} + +void run_queue_create(struct run_queue *queue) +{ + STAILQ_INIT(queue); +} + +void run_queue_destroy(struct run_queue *queue) +{ + struct run_queue_entry *entry1 = STAILQ_FIRST(queue); + while (entry1) { + struct run_queue_entry *entry2 = STAILQ_NEXT(entry1, entries); + run_queue_entry_destroy(entry1); + entry1 = entry2; + } + STAILQ_INIT(queue); +} + +int run_queue_is_empty(const struct run_queue *queue) +{ + return STAILQ_EMPTY(queue); +} + +void run_queue_add_last(struct run_queue *queue, struct run_queue_entry *entry) +{ + STAILQ_INSERT_TAIL(queue, entry, entries); +} + +void run_queue_add_first(struct run_queue *queue, struct run_queue_entry *entry) +{ + STAILQ_INSERT_HEAD(queue, entry, entries); +} + +struct run_queue_entry *run_queue_remove_first(struct run_queue *queue) +{ + struct run_queue_entry *entry = STAILQ_FIRST(queue); + STAILQ_REMOVE_HEAD(queue, entries); + return entry; +} diff --git a/src/run_queue.h b/src/run_queue.h new file mode 100644 index 0000000..629a8e0 --- /dev/null +++ b/src/run_queue.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 Egor Tensin + * This file is part of the "cimple" project. + * For details, see https://github.com/egor-tensin/cimple. + * Distributed under the MIT License. + */ + +#ifndef __RUN_QUEUE_H__ +#define __RUN_QUEUE_H__ + +#include + +struct run_queue_entry; + +int run_queue_entry_create(struct run_queue_entry **, const char *url, const char *rev); +void run_queue_entry_destroy(struct run_queue_entry *); + +const char *run_queue_entry_get_url(const struct run_queue_entry *); +const char *run_queue_entry_get_rev(const struct run_queue_entry *); + +STAILQ_HEAD(run_queue, run_queue_entry); + +void run_queue_create(struct run_queue *); +void run_queue_destroy(struct run_queue *); + +int run_queue_is_empty(const struct run_queue *); + +void run_queue_add_first(struct run_queue *, struct run_queue_entry *); +void run_queue_add_last(struct run_queue *, struct run_queue_entry *); + +struct run_queue_entry *run_queue_remove_first(struct run_queue *); + +#endif diff --git a/src/server.c b/src/server.c index db9f9c3..04a6847 100644 --- a/src/server.c +++ b/src/server.c @@ -6,12 +6,12 @@ */ #include "server.h" -#include "ci_queue.h" #include "command.h" #include "compiler.h" #include "const.h" #include "log.h" #include "msg.h" +#include "run_queue.h" #include "signal.h" #include "storage.h" #include "storage_sqlite.h" @@ -30,7 +30,7 @@ struct server { struct tcp_server *tcp_server; - struct ci_queue ci_queue; + struct run_queue run_queue; }; int server_create(struct server **_server, const struct settings *settings) @@ -71,7 +71,7 @@ int server_create(struct server **_server, const struct settings *settings) if (ret < 0) goto destroy_storage; - ci_queue_create(&server->ci_queue); + run_queue_create(&server->run_queue); *_server = server; return ret; @@ -95,7 +95,7 @@ void server_destroy(struct server *server) { log("Shutting down\n"); - ci_queue_destroy(&server->ci_queue); + run_queue_destroy(&server->run_queue); tcp_server_destroy(server->tcp_server); storage_destroy(&server->storage); pthread_errno_if(pthread_cond_destroy(&server->server_cv), "pthread_cond_destroy"); @@ -105,16 +105,16 @@ void server_destroy(struct server *server) static int server_has_runs(const struct server *server) { - return !ci_queue_is_empty(&server->ci_queue); + return !run_queue_is_empty(&server->run_queue); } -static int worker_ci_run(int fd, const struct ci_queue_entry *ci_run) +static int worker_ci_run(int fd, const struct run_queue_entry *ci_run) { struct msg *request = NULL, *response = NULL; int ret = 0; - const char *argv[] = {CMD_CI_RUN, ci_queue_entry_get_url(ci_run), - ci_queue_entry_get_rev(ci_run), NULL}; + const char *argv[] = {CMD_RUN, run_queue_entry_get_url(ci_run), + run_queue_entry_get_rev(ci_run), NULL}; ret = msg_from_argv(&request, argv); if (ret < 0) @@ -139,7 +139,7 @@ free_response: return ret; } -static int worker_dequeue_run(struct server *server, struct ci_queue_entry **ci_run) +static int worker_dequeue_run(struct server *server, struct run_queue_entry **ci_run) { int ret = 0; @@ -162,8 +162,9 @@ static int worker_dequeue_run(struct server *server, struct ci_queue_entry **ci_ goto unlock; } - *ci_run = ci_queue_remove_first(&server->ci_queue); - log("Removed a CI run for repository %s from the queue\n", ci_queue_entry_get_url(*ci_run)); + *ci_run = run_queue_remove_first(&server->run_queue); + log("Removed a CI run for repository %s from the queue\n", + run_queue_entry_get_url(*ci_run)); goto unlock; unlock: @@ -172,7 +173,7 @@ unlock: return ret; } -static int worker_requeue_run(struct server *server, struct ci_queue_entry *ci_run) +static int worker_requeue_run(struct server *server, struct run_queue_entry *ci_run) { int ret = 0; @@ -182,8 +183,8 @@ static int worker_requeue_run(struct server *server, struct ci_queue_entry *ci_r return ret; } - ci_queue_add_first(&server->ci_queue, ci_run); - log("Requeued a CI run for repository %s\n", ci_queue_entry_get_url(ci_run)); + run_queue_add_first(&server->run_queue, ci_run); + log("Requeued a CI run for repository %s\n", run_queue_entry_get_url(ci_run)); ret = pthread_cond_signal(&server->server_cv); if (ret) { @@ -200,7 +201,7 @@ unlock: static int worker_iteration(struct server *server, int fd) { - struct ci_queue_entry *ci_run = NULL; + struct run_queue_entry *ci_run = NULL; int ret = 0; ret = worker_dequeue_run(server, &ci_run); @@ -211,7 +212,7 @@ static int worker_iteration(struct server *server, int fd) if (ret < 0) goto requeue_run; - ci_queue_entry_destroy(ci_run); + run_queue_entry_destroy(ci_run); return ret; requeue_run: @@ -241,7 +242,7 @@ static int msg_new_worker_handler(int client_fd, UNUSED const struct msg *reques static int msg_ci_run_queue(struct server *server, const char *url, const char *rev) { - struct ci_queue_entry *entry = NULL; + struct run_queue_entry *entry = NULL; int ret = 0; ret = pthread_mutex_lock(&server->server_mtx); @@ -250,11 +251,11 @@ static int msg_ci_run_queue(struct server *server, const char *url, const char * return ret; } - ret = ci_queue_entry_create(&entry, url, rev); + ret = run_queue_entry_create(&entry, url, rev); if (ret < 0) goto unlock; - ci_queue_add_last(&server->ci_queue, entry); + run_queue_add_last(&server->run_queue, entry); log("Added a new CI run for repository %s to the queue\n", url); ret = pthread_cond_signal(&server->server_cv); @@ -294,7 +295,7 @@ static int msg_ci_run_handler(UNUSED int client_fd, const struct msg *request, v static struct cmd_desc commands[] = { {CMD_NEW_WORKER, msg_new_worker_handler}, - {CMD_CI_RUN, msg_ci_run_handler}, + {CMD_RUN, msg_ci_run_handler}, }; static int server_set_stopping(struct server *server) diff --git a/src/server.h b/src/server.h index 9c96db2..92ca37d 100644 --- a/src/server.h +++ b/src/server.h @@ -8,12 +8,6 @@ #ifndef __SERVER_H__ #define __SERVER_H__ -#include "ci_queue.h" -#include "storage.h" -#include "tcp_server.h" - -#include - struct settings { const char *port; diff --git a/src/server_main.c b/src/server_main.c index 7a407de..be2639f 100644 --- a/src/server_main.c +++ b/src/server_main.c @@ -10,6 +10,7 @@ #include "server.h" #include +#include static struct settings default_settings(void) { diff --git a/src/worker.c b/src/worker.c index 3cbe626..755ff35 100644 --- a/src/worker.c +++ b/src/worker.c @@ -129,7 +129,7 @@ static int msg_ci_run_handler(UNUSED int conn_fd, const struct msg *request, UNU } static struct cmd_desc cmds[] = { - {CMD_CI_RUN, msg_ci_run_handler}, + {CMD_RUN, msg_ci_run_handler}, }; int worker_main(struct worker *worker, UNUSED int argc, UNUSED char *argv[]) -- cgit v1.2.3