Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
kcenon::monitoring::transaction_manager Class Reference

Transaction manager for coordinating transactions. More...

#include <data_consistency.h>

Collaboration diagram for kcenon::monitoring::transaction_manager:
Collaboration graph

Public Member Functions

 transaction_manager (const std::string &name, const transaction_config &config)
 
std::string get_name () const
 
common::Result< std::shared_ptr< transaction > > begin_transaction (const std::string &id)
 
bool commit_transaction (const std::string &id)
 
bool abort_transaction (const std::string &id)
 
size_t active_transaction_count () const
 
size_t completed_transaction_count () const
 
common::Result< std::vector< std::string > > detect_deadlocks ()
 
void cleanup_completed_transactions (std::chrono::milliseconds)
 
transaction_metricsget_metrics ()
 
const transaction_metricsget_metrics () const
 

Private Attributes

std::string name_
 
transaction_config config_
 
std::shared_mutex mutex_
 
std::unordered_map< std::string, std::shared_ptr< transaction > > active_transactions_
 
std::unordered_map< std::string, std::shared_ptr< transaction > > completed_transactions_
 
transaction_metrics metrics_
 

Detailed Description

Transaction manager for coordinating transactions.

Definition at line 241 of file data_consistency.h.

Constructor & Destructor Documentation

◆ transaction_manager()

kcenon::monitoring::transaction_manager::transaction_manager ( const std::string & name,
const transaction_config & config )
inline

Definition at line 243 of file data_consistency.h.

Member Function Documentation

◆ abort_transaction()

bool kcenon::monitoring::transaction_manager::abort_transaction ( const std::string & id)
inline

Definition at line 286 of file data_consistency.h.

286 {
287 std::unique_lock<std::shared_mutex> lock(mutex_);
288
289 auto it = active_transactions_.find(id);
290 if (it == active_transactions_.end()) {
291 return false;
292 }
293
294 auto tx = it->second;
295 active_transactions_.erase(it);
296
297 tx->abort();
299 return true;
300 }
std::unordered_map< std::string, std::shared_ptr< transaction > > active_transactions_

References kcenon::monitoring::transaction_metrics::aborted_transactions, active_transactions_, metrics_, and mutex_.

Referenced by TEST_F().

Here is the caller graph for this function:

◆ active_transaction_count()

size_t kcenon::monitoring::transaction_manager::active_transaction_count ( ) const
inline

Definition at line 302 of file data_consistency.h.

302 {
303 std::shared_lock<std::shared_mutex> lock(mutex_);
304 return active_transactions_.size();
305 }

References active_transactions_, and mutex_.

Referenced by TEST_F().

Here is the caller graph for this function:

◆ begin_transaction()

common::Result< std::shared_ptr< transaction > > kcenon::monitoring::transaction_manager::begin_transaction ( const std::string & id)
inline

Definition at line 249 of file data_consistency.h.

249 {
250 std::unique_lock<std::shared_mutex> lock(mutex_);
251
252 // Check for duplicate transaction
253 if (active_transactions_.find(id) != active_transactions_.end()) {
254 return common::make_error<std::shared_ptr<transaction>>(
256 "Transaction with ID '" + id + "' already exists");
257 }
258
259 auto tx = std::make_shared<transaction>(id, config_);
260 active_transactions_[id] = tx;
262 return common::ok(tx);
263 }

References active_transactions_, kcenon::monitoring::already_exists, config_, metrics_, mutex_, and kcenon::monitoring::transaction_metrics::total_transactions.

Referenced by TEST_F(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), and TEST_F().

Here is the caller graph for this function:

◆ cleanup_completed_transactions()

void kcenon::monitoring::transaction_manager::cleanup_completed_transactions ( std::chrono::milliseconds )
inline

Definition at line 330 of file data_consistency.h.

330 {
331 std::unique_lock<std::shared_mutex> lock(mutex_);
333 }
std::unordered_map< std::string, std::shared_ptr< transaction > > completed_transactions_

References completed_transactions_, and mutex_.

Referenced by TEST_F().

Here is the caller graph for this function:

◆ commit_transaction()

bool kcenon::monitoring::transaction_manager::commit_transaction ( const std::string & id)
inline

Definition at line 265 of file data_consistency.h.

265 {
266 std::unique_lock<std::shared_mutex> lock(mutex_);
267
268 auto it = active_transactions_.find(id);
269 if (it == active_transactions_.end()) {
270 return false;
271 }
272
273 auto tx = it->second;
274 active_transactions_.erase(it);
275
276 bool success = tx->commit();
277 if (success) {
280 } else {
282 }
283 return success;
284 }

References kcenon::monitoring::transaction_metrics::aborted_transactions, active_transactions_, kcenon::monitoring::transaction_metrics::committed_transactions, completed_transactions_, metrics_, mutex_, and kcenon::monitoring::success.

Referenced by TEST_F(), TEST_F(), and TEST_F().

Here is the caller graph for this function:

◆ completed_transaction_count()

size_t kcenon::monitoring::transaction_manager::completed_transaction_count ( ) const
inline

Definition at line 307 of file data_consistency.h.

307 {
308 std::shared_lock<std::shared_mutex> lock(mutex_);
309 return completed_transactions_.size();
310 }

References completed_transactions_, and mutex_.

Referenced by TEST_F(), and TEST_F().

Here is the caller graph for this function:

◆ detect_deadlocks()

common::Result< std::vector< std::string > > kcenon::monitoring::transaction_manager::detect_deadlocks ( )
inline

Definition at line 312 of file data_consistency.h.

312 {
313 std::shared_lock<std::shared_mutex> lock(mutex_);
314
315 std::vector<std::string> deadlocked;
316 auto now = std::chrono::steady_clock::now();
317
318 for (const auto& [id, tx] : active_transactions_) {
319 auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(
320 now - tx->creation_time());
321 if (elapsed > config_.timeout) {
322 deadlocked.push_back(id);
324 }
325 }
326
327 return common::ok(deadlocked);
328 }

References active_transactions_, config_, kcenon::monitoring::transaction_metrics::deadlocks_detected, metrics_, mutex_, and kcenon::monitoring::transaction_config::timeout.

Referenced by TEST_F().

Here is the caller graph for this function:

◆ get_metrics() [1/2]

transaction_metrics & kcenon::monitoring::transaction_manager::get_metrics ( )
inline

Definition at line 335 of file data_consistency.h.

335{ return metrics_; }

References metrics_.

Referenced by TEST_F(), TEST_F(), TEST_F(), and TEST_F().

Here is the caller graph for this function:

◆ get_metrics() [2/2]

const transaction_metrics & kcenon::monitoring::transaction_manager::get_metrics ( ) const
inline

Definition at line 336 of file data_consistency.h.

336{ return metrics_; }

References metrics_.

◆ get_name()

std::string kcenon::monitoring::transaction_manager::get_name ( ) const
inline

Definition at line 247 of file data_consistency.h.

247{ return name_; }

References name_.

Member Data Documentation

◆ active_transactions_

std::unordered_map<std::string, std::shared_ptr<transaction> > kcenon::monitoring::transaction_manager::active_transactions_
private

◆ completed_transactions_

std::unordered_map<std::string, std::shared_ptr<transaction> > kcenon::monitoring::transaction_manager::completed_transactions_
private

◆ config_

transaction_config kcenon::monitoring::transaction_manager::config_
private

Definition at line 340 of file data_consistency.h.

Referenced by begin_transaction(), and detect_deadlocks().

◆ metrics_

transaction_metrics kcenon::monitoring::transaction_manager::metrics_
private

◆ mutex_

std::shared_mutex kcenon::monitoring::transaction_manager::mutex_
mutableprivate

◆ name_

std::string kcenon::monitoring::transaction_manager::name_
private

Definition at line 339 of file data_consistency.h.

Referenced by get_name().


The documentation for this class was generated from the following file: