From 2bd44da1cac7a91bff9a8867ef5c386a9317cb77 Mon Sep 17 00:00:00 2001 From: Rene Krenn Date: Mon, 3 Mar 2025 17:24:59 +0100 Subject: [PATCH] MT#62283 explicit contract id row lock timeout Change-Id: Ibbd257f19996e6238008d44328b121abd7d81de0 --- rate-o-mat.pl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rate-o-mat.pl b/rate-o-mat.pl index b7005fe..e726036 100755 --- a/rate-o-mat.pl +++ b/rate-o-mat.pl @@ -68,6 +68,8 @@ my $connect_interval = 3; my $maintenance_mode = $ENV{RATEOMAT_MAINTENANCE} // 'no'; +my $lock_timeout = 5; + my $hostname_filepath = '/etc/ngcp_hostname'; $hostname_filepath = $ENV{RATEOMAT_HOSTNAME_FILEPATH} if exists $ENV{RATEOMAT_HOSTNAME_FILEPATH}; @@ -1057,9 +1059,10 @@ sub lock_contracts { my $lock_count = scalar @cids; if ($pcid_count > 0 or $lock_count > 0) { push(@cids,@pcids); + $lock_count = scalar @cids; @cids = sort { $a <=> $b } @cids; #"Access your tables and rows in a fixed order." my $sth = $billdbh->prepare("SELECT c.id from billing.contracts c ". - "WHERE c.id IN (" . substr(',?' x $lock_count,1) . ") FOR UPDATE") + "WHERE c.id IN (" . substr(',?' x $lock_count,1) . ") FOR UPDATE WAIT $lock_timeout") or FATAL "Error preparing contract row lock statement: ".$billdbh->errstr; #finally lock the contract rows at this point: $sth->execute(@cids)