Etcd-Lock
view release on metacpan or search on metacpan
lib/Etcd/Lock.pm view on Meta::CPAN
return $s->{ttl};
}
sub _lock_unlock ( ) {
my $s = shift;
my $nval = shift;
my $k = $s->{key};
my $val = $s->{etcd}->range( { key => $k } )->get_value;
return $val unless defined $nval;
return false if defined $val && $val eq $nval;
my $lid = $s->_lease_id;
if ($nval) {
$s->{etcd}->lease( { ID => $lid, TTL => $s->{ttl} } )->grant;
$s->{etcd}->put( { key => $k, value => $nval, lease => $lid } );
}
else {
$s->{etcd}->deleterange( { key => $k } );
$s->{etcd}->lease( { ID => $lid } )->revoke;
}
return true;
}
sub _lease_id {
my $s = shift;
state $leased_id //= $$ . time;
return $leased_id;
}
1;
=pod
=head1 NAME
Etcd::Lock - Lock based on etcd
=for html <p>
<a href="https://github.com/emilianobruni/etcd-lock/actions/workflows/test.yml">
<img alt="github workflow tests" src="https://github.com/emilianobruni/etcd-lock/actions/workflows/test.yml/badge.svg">
</a>
<img alt="Top language: " src="https://img.shields.io/github/languages/top/emilianobruni/etcd-lock">
<img alt="github last commit" src="https://img.shields.io/github/last-commit/emilianobruni/etcd-lock">
</p>
=head1 VERSION
version 0.03
=head1 SYNOPSIS
use Etcd::Lock
my $etcdLock = Etcd::Lock->new(host => 'host.name.com', key => 'lock_key');
$etcdLock->lock();
... do_something ...
$etcdLock->unlock();
=head1 DESCRIPTION
Etcd::Lock is a lock based on etcd. When a key is locked, try to lock same key
return false. Key is unlocked automatically when ttl seconds expired.
=encoding UTF-8
=head1 METHODS
=head2 lock()
Return true if key is unlocked. Now it's locked.
=head2 unlock()
Return true if key is locked. Now it's unlocked
=head2 ttl(new_ttl)
Set or return after how many seconds a lock is automatically removed.
Defaul: 3600.
=head1 BUGS/CONTRIBUTING
Please report any bugs through the web interface at L<https://github.com/EmilianoBruni/etcd-lock/issues>
If you want to contribute changes or otherwise involve yourself in development, feel free to fork the Git repository from
L<https://github.com/EmilianoBruni/etcd-lock/>.
=head1 SUPPORT
You can find this documentation with the perldoc command too.
perldoc etcd-lock
=head1 AUTHOR
Emiliano Bruni <info@ebruni.it>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2022 by Emiliano Bruni.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
__END__
# ABSTRACT: Lock based on etcd
( run in 1.075 second using v1.01-cache-2.11-cpan-f56aa216473 )