From 3d48f7a8de454d05990d4c855e8d3a57eceae5ae Mon Sep 17 00:00:00 2001 From: Marco Edoardo Santimaria Date: Tue, 5 Aug 2025 14:01:15 +0200 Subject: [PATCH] Added Commit-N-Files rule parsing within the CAPIO-CL json parser --- src/common/capio/constants.hpp | 1 + src/server/capio-cl-engine/json_parser.hpp | 26 ++++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/common/capio/constants.hpp b/src/common/capio/constants.hpp index e07920bcf..900d55696 100644 --- a/src/common/capio/constants.hpp +++ b/src/common/capio/constants.hpp @@ -51,6 +51,7 @@ constexpr char CAPIO_FILE_MODE_NO_UPDATE[] = "no_update"; constexpr char CAPIO_FILE_MODE_UPDATE[] = "update"; constexpr char CAPIO_FILE_COMMITTED_ON_CLOSE[] = "on_close"; constexpr char CAPIO_FILE_COMMITTED_ON_FILE[] = "on_file"; +constexpr char CAPIO_FILE_COMMITTED_N_FILES[] = "n_files"; constexpr char CAPIO_FILE_COMMITTED_ON_TERMINATION[] = "on_termination"; // CAPIO POSIX return codes diff --git a/src/server/capio-cl-engine/json_parser.hpp b/src/server/capio-cl-engine/json_parser.hpp index a6d5a4891..62ddd4aff 100644 --- a/src/server/capio-cl-engine/json_parser.hpp +++ b/src/server/capio-cl-engine/json_parser.hpp @@ -1,5 +1,7 @@ #ifndef JSON_PARSER_HPP #define JSON_PARSER_HPP +#include "capio/constants.hpp" + #include /** @@ -216,22 +218,28 @@ class JsonParser { auto pos = committed.find(':'); if (pos != std::string::npos) { commit_rule = committed.substr(0, pos); - if (commit_rule != CAPIO_FILE_COMMITTED_ON_CLOSE) { + std::string count_str(committed.substr(pos + 1, committed.length())); + if (!is_int(count_str)) { std::cout << CAPIO_LOG_SERVER_CLI_LEVEL_ERROR << " [ " << node_name << " ] " - << "commit rule " << commit_rule << std::endl; - ERR_EXIT("error commit rule: %s", std::string(commit_rule).c_str()); + << "commit rule on_close/n_files invalid number" + << std::endl; + ERR_EXIT("error commit rule on_close invalid number: !is_int()"); } - std::string n_close_str(committed.substr(pos + 1, committed.length())); - - if (!is_int(n_close_str)) { + if (commit_rule == CAPIO_FILE_COMMITTED_ON_CLOSE) { + n_close = std::stol(count_str); + } else if (commit_rule == CAPIO_FILE_COMMITTED_N_FILES) { + n_files = std::stol(count_str); + // TODO: use internally n_files. for now, we use on_close as default + commit_rule = CAPIO_FILE_COMMITTED_ON_CLOSE; + } else { std::cout << CAPIO_LOG_SERVER_CLI_LEVEL_ERROR << " [ " << node_name << " ] " - << "commit rule on_close invalid number" << std::endl; - ERR_EXIT("error commit rule on_close invalid number: !is_int()"); + << "commit rule " << commit_rule << std::endl; + ERR_EXIT("error commit rule: %s", std::string(commit_rule).c_str()); } - n_close = std::stol(n_close_str); + } else { commit_rule = committed; }