33
44package OpenQA::CacheService::Model::Cache ;
55use Mojo::Base -base, -signatures;
6+ use Feature::Compat::Try;
67
78use Carp ' croak' ;
89use Capture::Tiny ' capture_merged' ;
@@ -46,14 +47,14 @@ sub repair_database ($self, $db_file = $self->_locate_db_file) {
4647 # perform integrity check and test migration; try to provoke an error
4748 my $log = $self -> log ;
4849 $log -> debug(" Testing sqlite database ($db_file )" );
49- eval {
50+ try {
5051 die " database integrity check failed\n " if $self -> _check_database_integrity;
5152 $self -> sqlite-> migrations-> migrate;
52- };
53+ }
5354
5455 # remove broken database
55- if ( my $err = $@ ) {
56- $log -> error(" Database has been corrupted: $err " );
56+ catch ( $e ) {
57+ $log -> error(" Database has been corrupted: $e " );
5758 $log -> error(' Killing processes accessing the database file handles and removing database' );
5859 $self -> _kill_db_accessing_processes(" '$db_file '*" );
5960 }
@@ -158,15 +159,15 @@ sub asset ($self, $asset) {
158159}
159160
160161sub track_asset ($self , $asset ) {
161- eval {
162+ try {
162163 my $db = $self -> sqlite-> db;
163164 my $tx = $db -> begin(' exclusive' );
164165 my $sql = " INSERT INTO assets (filename, size, last_use) VALUES (?, 0, strftime('%s ','now'))"
165166 . ' ON CONFLICT (filename) DO UPDATE SET pending=1' ;
166167 $db -> query($sql , $asset );
167168 $tx -> commit;
168- };
169- if ( my $err = $@ ) { $self -> log -> error(" Tracking asset failed: $err " ) }
169+ }
170+ catch ( $e ) { $self -> log -> error(" Tracking asset failed: $e " ) }
170171}
171172
172173sub metrics ($self ) {
@@ -270,8 +271,9 @@ sub _exceeds_limit ($self, $needed) {
270271 return 1 if $self -> {cache_real_size } + $needed > $limit ;
271272 }
272273 if (my $min_free_percentage = $self -> min_free_percentage) {
273- my ($available_bytes , $total_bytes ) = eval { check_df $self -> location };
274- if (my $error = $@ ) { chomp $error ; $self -> log -> error($error ); return 0 }
274+ my ($available_bytes , $total_bytes );
275+ try { ($available_bytes , $total_bytes ) = check_df $self -> location }
276+ catch ($e ) { chomp $e ; $self -> log -> error($e ); return 0 }
275277 return 1 if ($available_bytes - $needed ) / $total_bytes * 100 < $min_free_percentage ;
276278 }
277279 return 0;
@@ -287,7 +289,7 @@ sub _check_limits ($self, $needed, $to_preserve = undef) {
287289 my $limit_size = human_readable_size($limit );
288290 $log -> info(
289291 " Cache size $cache_size + needed $needed_size exceeds limit of $limit_size , purging least used assets" );
290- eval {
292+ try {
291293 my $results
292294 = $self -> sqlite-> db-> select(' assets' , [qw( filename size last_use) ], {pending => ' 0' },
293295 {-asc => ' last_use' });
@@ -300,22 +302,22 @@ sub _check_limits ($self, $needed, $to_preserve = undef) {
300302 $self -> _decrease($asset_size ) if $self -> purge_asset($filename );
301303 last if !$self -> _exceeds_limit($needed );
302304 }
303- };
304- if ( my $err = $@ ) { $log -> error(" Checking cache limit failed: $err " ) }
305+ }
306+ catch ( $e ) { $log -> error(" Checking cache limit failed: $e " ) }
305307 }
306308}
307309
308310sub _delete_pending_assets ($self ) {
309311 my $log = $self -> log ;
310- eval {
312+ try {
311313 my $results = $self -> sqlite-> db-> select(' assets' , [qw( filename pending) ], {pending => ' 1' });
312314 for my $asset ($results -> hashes-> each ) {
313315 my $filename = $asset -> {filename };
314316 $log -> info(qq{ Purging "$filename " because it appears pending after service startup} );
315317 $self -> purge_asset($filename );
316318 }
317- };
318- if ( my $err = $@ ) { $log -> error(" Checking for pending leftovers failed: $err " ) }
319+ }
320+ catch ( $e ) { $log -> error(" Checking for pending leftovers failed: $e " ) }
319321}
320322
3213231;
0 commit comments