From 479998d76f805c02e041adb209857d4ca6b3f87f Mon Sep 17 00:00:00 2001 From: OpenGnSys Support Team Date: Thu, 31 Oct 2024 00:27:57 +0100 Subject: src: add last client command context and use it for image creation Add last client command context that is used in the request to client. This allows to remove the stub image entry in the database in case that the image creation fails. --- src/client.c | 37 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 25 deletions(-) (limited to 'src/client.c') diff --git a/src/client.c b/src/client.c index cdc7b6b..2480768 100644 --- a/src/client.c +++ b/src/client.c @@ -1290,11 +1290,9 @@ static int og_agent_http_response_code(const char *buf) return -1; } -static int og_clear_image_placeholder() +static int og_resp_image_create_error(struct og_client *cli) { - uint32_t image_id = 0; struct og_dbi *dbi; - dbi_result result; dbi = og_dbi_open(&ogconfig.db); if (!dbi) { @@ -1303,26 +1301,9 @@ static int og_clear_image_placeholder() return -1; } - result = dbi_conn_queryf(dbi->conn, - "SELECT idimagen FROM imagenes WHERE fechacreacion IS NULL"); - if (!result) { - syslog(LOG_ERR, "failed to query database\n"); - return -1; - } - - if (!dbi_result_next_row(result)) { - dbi_result_free(result); - og_dbi_close(dbi); - return 0; - } - - image_id = dbi_result_get_uint(result, "idimagen"); - dbi_result_free(result); - - syslog(LOG_INFO, "Trying to delete uninitialized image with id %d\n", image_id); - - if (og_dbi_delete_image(dbi, image_id) < 0) { - og_dbi_close(dbi); + if (og_dbi_delete_image(dbi, cli->last_cmd.ctx.image.id) < 0) { + syslog(LOG_WARNING, "Cannot delete image stub with id %d\n", + cli->last_cmd.ctx.image.id); return -1; } @@ -1334,6 +1315,7 @@ static void og_client_reset_cmd(struct og_client *cli) { cli->last_cmd.id = 0; cli->last_cmd.type = OG_CMD_UNSPEC; + memset(&cli->last_cmd.ctx, 0, sizeof(cli->last_cmd.ctx)); } int og_agent_state_process_response(struct og_client *cli) @@ -1389,11 +1371,16 @@ int og_agent_state_process_response(struct og_client *cli) else cli->last_cmd.result = OG_FAILURE; - if (!success && cmd_type == OG_CMD_IMAGE_CREATE) - og_clear_image_placeholder(); + if (!success && cmd_type == OG_CMD_IMAGE_CREATE) { + syslog(LOG_ERR, "Client %s:%hu reports failure when creating image with id %d\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port), + cli->last_cmd.ctx.image.id); + og_resp_image_create_error(cli); + } if (code != 200 && code != 103) { cli->last_cmd.id = 0; + memset(&cli->last_cmd.ctx, 0, sizeof(cli->last_cmd.ctx)); return ret; } -- cgit v1.2.3-18-g5258