15#include <condition_variable>
19#include <shared_mutex>
22#include <unordered_map>
50 std::chrono::milliseconds
timeout{std::chrono::milliseconds(30000)};
51 std::chrono::milliseconds
lock_timeout{std::chrono::milliseconds(10000)};
139 if (result.is_ok()) {
151 return result.is_ok();
174 std::string
id()
const {
return id_; }
192 auto now = std::chrono::steady_clock::now();
193 auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now -
creation_time_);
200 size_t executed_count = 0;
202 auto result = op->execute();
203 if (!result.is_ok()) {
205 for (
size_t i = executed_count; i > 0; --i) {
250 std::unique_lock<std::shared_mutex> lock(
mutex_);
254 return common::make_error<std::shared_ptr<transaction>>(
256 "Transaction with ID '" +
id +
"' already exists");
259 auto tx = std::make_shared<transaction>(
id,
config_);
262 return common::ok(tx);
266 std::unique_lock<std::shared_mutex> lock(
mutex_);
273 auto tx = it->second;
287 std::unique_lock<std::shared_mutex> lock(
mutex_);
294 auto tx = it->second;
303 std::shared_lock<std::shared_mutex> lock(
mutex_);
308 std::shared_lock<std::shared_mutex> lock(
mutex_);
313 std::shared_lock<std::shared_mutex> lock(
mutex_);
315 std::vector<std::string> deadlocked;
316 auto now = std::chrono::steady_clock::now();
319 auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(
320 now - tx->creation_time());
322 deadlocked.push_back(
id);
327 return common::ok(deadlocked);
331 std::unique_lock<std::shared_mutex> lock(
mutex_);
375 std::unique_lock<std::mutex> lock(
mutex_);
380 common::Result<std::unordered_map<std::string, validation_result>>
validate() {
381 std::unique_lock<std::mutex> lock(
mutex_);
383 std::unordered_map<std::string, validation_result> results;
387 auto validation_result_value = rule.validation_func();
388 results[name] = validation_result_value;
393 auto repair_result = rule.repair_func();
394 if (repair_result.is_ok()) {
397 auto after_repair = rule.validation_func();
398 results[name +
"_after_repair"] = after_repair;
403 return common::ok(results);
414 std::unique_lock<std::mutex> lock(
cv_mutex_);
416 return !running_.load();
437 std::unique_lock<std::mutex> lock(
cv_mutex_);
450 return common::ok(
true);
471 std::condition_variable
cv_;
484 std::unique_lock<std::mutex> lock(
mutex_);
487 return common::VoidResult::err(common::error_info(
489 "Transaction manager '" + name +
"' already exists",
490 "monitoring_system"));
498 std::unique_lock<std::mutex> lock(
mutex_);
504 return it->second.get();
509 std::unique_lock<std::mutex> lock(
mutex_);
512 return common::VoidResult::err(common::error_info(
514 "State validator '" + name +
"' already exists",
515 "monitoring_system"));
523 std::unique_lock<std::mutex> lock(
mutex_);
529 return it->second.get();
533 std::unique_lock<std::mutex> lock(
mutex_);
536 auto result = validator->start();
537 if (!result.is_ok()) {
545 std::unique_lock<std::mutex> lock(
mutex_);
554 return common::ok(
true);
558 std::unordered_map<std::string, std::string> all_metrics;
561 all_metrics[name +
"_transactions"] = std::to_string(manager->get_metrics().total_transactions.load());
565 all_metrics[name +
"_validation"] = std::to_string(validator->get_metrics().validation_runs.load());
583 return std::make_shared<transaction_manager>(name, config);
591 return std::make_shared<state_validator>(name, config);
598 return std::make_shared<data_consistency_manager>(name);
Data consistency manager coordinating transaction managers and validators.
common::VoidResult start_all_validators()
std::unordered_map< std::string, std::string > get_all_metrics() const
transaction_manager * get_transaction_manager(const std::string &name)
common::VoidResult add_transaction_manager(const std::string &name, const transaction_config &config)
data_consistency_manager(const std::string &name)
state_validator * get_state_validator(const std::string &name)
common::Result< bool > is_healthy() const
common::VoidResult add_state_validator(const std::string &name, const validation_config &config)
std::unordered_map< std::string, std::shared_ptr< state_validator > > state_validators_
std::unordered_map< std::string, std::shared_ptr< transaction_manager > > transaction_managers_
common::VoidResult stop_all_validators()
State validator for validating system state.
state_validator & operator=(state_validator &&)=delete
std::function< validation_result()> validation_func_t
std::function< common::VoidResult()> repair_func_t
std::unordered_map< std::string, validation_rule > validation_rules_
bool add_validation_rule(const std::string &name, validation_func_t validation_func, repair_func_t repair_func=nullptr)
std::string get_name() const
const validation_metrics & get_metrics() const
state_validator(const state_validator &)=delete
validation_metrics & get_metrics()
state_validator & operator=(const state_validator &)=delete
state_validator(const std::string &name, const validation_config &config)
common::Result< bool > is_healthy() const
std::atomic< bool > running_
validation_metrics metrics_
std::condition_variable cv_
common::VoidResult stop()
validation_config config_
state_validator(state_validator &&)=delete
common::Result< std::unordered_map< std::string, validation_result > > validate()
std::thread validation_thread_
common::VoidResult start()
Transaction manager for coordinating transactions.
std::unordered_map< std::string, std::shared_ptr< transaction > > active_transactions_
const transaction_metrics & get_metrics() const
size_t completed_transaction_count() const
size_t active_transaction_count() const
common::Result< std::shared_ptr< transaction > > begin_transaction(const std::string &id)
bool commit_transaction(const std::string &id)
std::unordered_map< std::string, std::shared_ptr< transaction > > completed_transactions_
std::string get_name() const
transaction_metrics metrics_
void cleanup_completed_transactions(std::chrono::milliseconds)
common::Result< std::vector< std::string > > detect_deadlocks()
transaction_config config_
transaction_manager(const std::string &name, const transaction_config &config)
transaction_metrics & get_metrics()
bool abort_transaction(const std::string &id)
Single transaction operation with execute and rollback capabilities.
std::function< common::VoidResult()> rollback_func_t
common::VoidResult execute()
execute_func_t execute_func_
transaction_operation(const std::string &name, execute_func_t execute_func, rollback_func_t rollback_func=nullptr)
std::function< common::VoidResult()> execute_func_t
rollback_func_t rollback_func_
Transaction containing multiple operations.
std::chrono::steady_clock::time_point creation_time() const
bool add_operation(std::unique_ptr< transaction_operation > op)
std::chrono::steady_clock::time_point creation_time_
transaction_config config_
transaction(const std::string &id, const transaction_config &config)
std::vector< std::unique_ptr< transaction_operation > > operations_
transaction_state state() const
size_t operation_count() const
std::shared_ptr< state_validator > create_state_validator(const std::string &name)
Factory function to create a state validator.
validation_result
Validation result states.
std::shared_ptr< data_consistency_manager > create_data_consistency_manager(const std::string &name)
Factory function to create a data consistency manager.
transaction_state
Transaction states.
std::shared_ptr< transaction_manager > create_transaction_manager(const std::string &name)
Factory function to create a transaction manager.
Result pattern type definitions for monitoring system.
Extended error information with context.
repair_func_t repair_func
validation_func_t validation_func
Transaction configuration.
std::chrono::milliseconds lock_timeout
std::chrono::milliseconds timeout
std::atomic< size_t > total_transactions
std::atomic< size_t > committed_transactions
std::atomic< size_t > deadlocks_detected
std::atomic< size_t > aborted_transactions
double get_abort_rate() const
Validation configuration.
double corruption_threshold
size_t max_validation_failures
std::chrono::milliseconds validation_interval
std::atomic< size_t > validation_runs
std::atomic< size_t > repair_operations