X-Git-Url: http://git.rot13.org/?p=perl-cwmp.git;a=blobdiff_plain;f=lib%2FCWMP%2FStore%2FDBMDeep.pm;h=80fabd1360c084f7d6763caf82cb37393648c1ab;hp=985a1243e15b0208997691f93fe4e6fe0b5cad42;hb=73114373a890391990bba21f0b4eadb18a4a859b;hpb=76f0eb0f5ef43fb8d479f1acf20aa882282d8eff diff --git a/lib/CWMP/Store/DBMDeep.pm b/lib/CWMP/Store/DBMDeep.pm index 985a124..80fabd1 100644 --- a/lib/CWMP/Store/DBMDeep.pm +++ b/lib/CWMP/Store/DBMDeep.pm @@ -6,6 +6,7 @@ use warnings; use DBM::Deep; use Data::Dump qw/dump/; +use Clone qw/clone/; use Carp qw/confess/; =head1 NAME @@ -16,11 +17,17 @@ CWMP::Store::DBMDeep - use DBM::Deep as storage =head2 open + $store->open({ + path => 'var/', + debug => 1, + clean => 1, + }); + =cut my $db; -my $debug = 1; +my $debug = 0; sub open { my $self = shift; @@ -34,6 +41,11 @@ sub open { $path = "$path/state.db" if ( -d $args->{path} ); + if ( $args->{clean} && -e $path ) { + warn "removed old $path\n"; + unlink $path || die "can't remove $path: $!"; + } + $db = DBM::Deep->new( file => $path, locking => 1, @@ -51,12 +63,14 @@ sub open { sub update_uid_state { my ( $self, $uid, $state ) = @_; + my $data = clone( $state ); + if ( my $o = $db->get( $uid ) ) { warn "## update state of $uid\n" if $debug; - return $o->import( $state ); + $o->import( $data ); } else { warn "## create new state for $uid\n" if $debug; - return $db->put( $uid => $state ); + $db->put( $uid => $data ); } } @@ -70,9 +84,7 @@ sub get_state { my ( $self, $uid ) = @_; if ( my $state = $db->get( $uid ) ) { - return $state->export; - } else { - return; + $state->export; } }