From d4bafff41f1235815761b2ddaf168dcb874989c5 Mon Sep 17 00:00:00 2001 From: miker Date: Fri, 25 Feb 2005 21:22:43 +0000 Subject: [PATCH] making return on failure sane git-svn-id: svn://svn.open-ils.org/OpenSRF/trunk@117 9efc2488-bf62-4759-914b-345cdb29e865 --- src/perlmods/OpenSRF/Application/Persist.pm | 155 ++++++++++++-------- 1 file changed, 93 insertions(+), 62 deletions(-) diff --git a/src/perlmods/OpenSRF/Application/Persist.pm b/src/perlmods/OpenSRF/Application/Persist.pm index a6d6408..c56dce3 100644 --- a/src/perlmods/OpenSRF/Application/Persist.pm +++ b/src/perlmods/OpenSRF/Application/Persist.pm @@ -73,30 +73,34 @@ sub create_store { my $name = shift || ''; - - my $continue = 0; try { - _get_name_id($name); + + my $continue = 0; + try { + _get_name_id($name); - } catch Error with { - $continue++; - }; + } catch Error with { + $continue++; + }; - throw OpenSRF::EX::WARN ("Duplicate key: object name [$name] already exists! " . $dbh->errstr) - unless ($continue); + throw OpenSRF::EX::WARN ("Duplicate key: object name [$name] already exists! " . $dbh->errstr) + unless ($continue); - my $sth = $dbh->prepare("INSERT INTO store_name (name) VALUES (?);"); - $sth->execute($name); - $sth->finish; + my $sth = $dbh->prepare("INSERT INTO store_name (name) VALUES (?);"); + $sth->execute($name); + $sth->finish; - unless ($name) { - my $last_id = $dbh->last_insert_id(undef, undef, 'store_name', 'id'); - $name = 'AUTOGENERATED!!'.$last_id; - $dbh->do("UPDATE store_name SET name = '$name' WHERE id = '$last_id';"); - } + unless ($name) { + my $last_id = $dbh->last_insert_id(undef, undef, 'store_name', 'id'); + $name = 'AUTOGENERATED!!'.$last_id; + $dbh->do("UPDATE store_name SET name = '$name' WHERE id = '$last_id';"); + } - _flush_by_name($name); - return $name; + _flush_by_name($name); + return $name; + } catch Error with { + return undef; + }; } __PACKAGE__->register_method( api_name => 'opensrf.persist.slot.create', @@ -112,17 +116,15 @@ sub create_expirable_store { my $time = shift || $default_expire_time; try { - __PACKAGE__->method_lookup( 'opensrf.persist.slot.create' )->run( $name ); + $name = $self->method_lookup( 'opensrf.persist.slot.create' )->run( $name ); + return undef unless $name; + + $self->method_lookup('opensrf.persist.slot.set_expire')->run($name, $time); + return $name; } catch Error with { - my $e = shift; - if ($e->message =~ /^Duplicate key/o) { - throw $e; - } + return undef; }; - $self->method_lookup('opensrf.persist.slot.set_expire')->run($name, $time); - - return $name; } __PACKAGE__->register_method( api_name => 'opensrf.persist.slot.create_expirable', @@ -141,14 +143,16 @@ sub set_expire_interval { my $slot = shift; my $new_interval = shift; - my $etime = interval_to_seconds($new_interval); - my $sid = _get_name_id($slot); + try { + my $etime = interval_to_seconds($new_interval); + my $sid = _get_name_id($slot); - $dbh->do('DELETE FROM store_expire where id = ?', {}, $sid); - return $slot if ($etime == 0); + $dbh->do('DELETE FROM store_expire where id = ?', {}, $sid); + return 0 if ($etime == 0); - $dbh->do('INSERT INTO store_expire (id, atime, expire_interval) VALUES (?,?,?);',{},$sid,time(),$etime); - return $slot; + $dbh->do('INSERT INTO store_expire (id, atime, expire_interval) VALUES (?,?,?);',{},$sid,time(),$etime); + return $etime; + } } __PACKAGE__->register_method( api_name => 'opensrf.persist.slot.set_expire', @@ -179,20 +183,24 @@ sub add_item { my $name = shift or do { throw OpenSRF::EX::WARN ("No name specified!"); }; + my $value = shift || ''; - my $name_id = _get_name_id($name); + try { + my $name_id = _get_name_id($name); - if ($self->api_name =~ /object/) { - $dbh->do('DELETE FROM storage WHERE name_id = ?;', {}, $name_id); - } + if ($self->api_name =~ /object/) { + $dbh->do('DELETE FROM storage WHERE name_id = ?;', {}, $name_id); + } - $dbh->do('INSERT INTO storage (name_id,value) VALUES (?,?);', {}, $name_id, JSON->perl2JSON($value)); + $dbh->do('INSERT INTO storage (name_id,value) VALUES (?,?);', {}, $name_id, JSON->perl2JSON($value)); - _flush_by_name($name); + _flush_by_name($name); - return 0 if ($dbh->err); - return $name; + return $name; + } catch Error with { + return undef; + }; } __PACKAGE__->register_method( api_name => 'opensrf.persist.object.set', @@ -246,14 +254,20 @@ sub destroy_store { my $name = shift; - my $name_id = _get_name_id($name); + my $problem = 0; + try { + my $name_id = _get_name_id($name); + + $dbh->do("DELETE FROM storage WHERE name_id = ?;", {}, $name_id); + $dbh->do("DELETE FROM store_name WHERE id = ?;", {}, $name_id); + $dbh->do("DELETE FROM store_expire WHERE id = ?;", {}, $name_id); - $dbh->do("DELETE FROM storage WHERE name_id = ?;", {}, $name_id); - $dbh->do("DELETE FROM store_name WHERE id = ?;", {}, $name_id); - $dbh->do("DELETE FROM store_expire WHERE id = ?;", {}, $name_id); - _sweep_expired_slots(); + _sweep_expired_slots(); + return $name; + } catch Error with { + return undef; + }; - return 1; } __PACKAGE__->register_method( api_name => 'opensrf.persist.slot.destroy', @@ -287,14 +301,21 @@ sub pop_queue { my $name = shift or do { throw OpenSRF::EX::WARN ("No queue name specified!"); }; - my $name_id = _get_name_id($name); - my $value = $dbh->selectrow_arrayref('SELECT id, value FROM storage WHERE name_id = ? ORDER BY id ASC LIMIT 1;', {}, $name_id); - $dbh->do('DELETE FROM storage WHERE id = ?;',{}, $value->[0]) unless ($self->api_name =~ /peek$/); + try { + my $name_id = _get_name_id($name); - _flush_by_name($name); + my $value = $dbh->selectrow_arrayref('SELECT id, value FROM storage WHERE name_id = ? ORDER BY id ASC LIMIT 1;', {}, $name_id); + $dbh->do('DELETE FROM storage WHERE id = ?;',{}, $value->[0]) unless ($self->api_name =~ /peek$/); - return JSON->JSON2perl( $value->[1] ); + _flush_by_name($name); + + return JSON->JSON2perl( $value->[1] ); + } catch Error with { + #my $e = shift; + #return $e; + return undef; + }; } __PACKAGE__->register_method( api_name => 'opensrf.persist.queue.peek', @@ -399,16 +420,22 @@ sub shift_stack { my $client = shift; my $name = shift or do { - throw OpenSRF::EX::WARN ("No queue name specified!"); + throw OpenSRF::EX::WARN ("No slot name specified!"); }; - my $name_id = _get_name_id($name); - my $value = $dbh->selectrow_arrayref('SELECT id, value FROM storage WHERE name_id = ? ORDER BY id DESC LIMIT 1;', {}, $name_id); - $dbh->do('DELETE FROM storage WHERE id = ?;',{}, $value->[0]) unless ($self->api_name =~ /peek$/); + try { + my $name_id = _get_name_id($name); - _flush_by_name($name); + my $value = $dbh->selectrow_arrayref('SELECT id, value FROM storage WHERE name_id = ? ORDER BY id DESC LIMIT 1;', {}, $name_id); + $dbh->do('DELETE FROM storage WHERE id = ?;',{}, $value->[0]) unless ($self->api_name =~ /peek$/); + + _flush_by_name($name); - return JSON->JSON2perl( $value->[1] ); + return JSON->JSON2perl( $value->[1] ); + } catch Error with { + my $e = shift; + return undef; + }; } __PACKAGE__->register_method( api_name => 'opensrf.persist.stack.peek', @@ -429,14 +456,18 @@ sub get_object { throw OpenSRF::EX::WARN ("No object name specified!"); }; - my $name_id = _get_name_id($name); + try { + my $name_id = _get_name_id($name); - my $value = $dbh->selectrow_arrayref('SELECT name_id, value FROM storage WHERE name_id = ? ORDER BY id DESC LIMIT 1;', {}, $name_id); - $dbh->do('DELETE FROM storage WHERE name_id = ?',{}, $value->[0]) unless ($self->api_name =~ /peek$/); + my $value = $dbh->selectrow_arrayref('SELECT name_id, value FROM storage WHERE name_id = ? ORDER BY id DESC LIMIT 1;', {}, $name_id); + $dbh->do('DELETE FROM storage WHERE name_id = ?',{}, $value->[0]) unless ($self->api_name =~ /peek$/); - _flush_by_name($name); + _flush_by_name($name); - return JSON->JSON2perl( $value->[1] ); + return JSON->JSON2perl( $value->[1] ); + } catch Error with { + return undef; + }; } __PACKAGE__->register_method( api_name => 'opensrf.persist.object.peek', -- 2.43.2