blib/lib/Etcd/Lock.pm | |||
---|---|---|---|
Criterion | Covered | Total | % |
statement | 8 | 27 | 29.6 |
branch | 0 | 6 | 0.0 |
condition | 0 | 3 | 0.0 |
subroutine | 3 | 7 | 42.8 |
pod | 0 | 3 | 0.0 |
total | 11 | 46 | 23.9 |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package Etcd::Lock; | ||||||
2 | $Etcd::Lock::VERSION = '0.02'; | ||||||
3 | 2 | 2 | 164639 | use 5.012; | |||
2 | 30 | ||||||
4 | |||||||
5 | 2 | 2 | 1124 | use Net::Etcd; | |||
2 | 555644 | ||||||
2 | 62 | ||||||
6 | 2 | 2 | 794 | use boolean; | |||
2 | 1847 | ||||||
2 | 8 | ||||||
7 | |||||||
8 | sub new { | ||||||
9 | 0 | 0 | 0 | my $c = shift; | |||
10 | 0 | my %a = @_; | |||||
11 | 0 | my %b; | |||||
12 | 0 | $b{etcd} = Net::Etcd->new( { host => $a{host} } ); | |||||
13 | 0 | foreach (qw/host key/) { | |||||
14 | 0 | $b{$_} = $a{$_}; | |||||
15 | } | ||||||
16 | 0 | return bless \%b, $c; | |||||
17 | } | ||||||
18 | |||||||
19 | sub lock () { | ||||||
20 | 0 | 0 | 0 | my $s = shift; | |||
21 | 0 | return $s->_lock_unlock( true ); | |||||
22 | } | ||||||
23 | |||||||
24 | sub unlock () { | ||||||
25 | 0 | 0 | 0 | my $s = shift;; | |||
26 | 0 | return $s->_lock_unlock( false ); | |||||
27 | } | ||||||
28 | |||||||
29 | sub _lock_unlock ( ) { | ||||||
30 | 0 | 0 | my $s = shift; | ||||
31 | 0 | my $nval = shift; | |||||
32 | 0 | my $k = $s->{key}; | |||||
33 | |||||||
34 | 0 | my $val = $s->{etcd}->range( { key => $k } )->get_value; | |||||
35 | 0 | 0 | return $val unless defined $nval; | ||||
36 | 0 | 0 | 0 | return false if defined $val && $val eq $nval; | |||
37 | $nval | ||||||
38 | ? $s->{etcd}->put( { key => $k, value => $nval } ) | ||||||
39 | 0 | 0 | : $s->{etcd}->deleterange( { key => $k } ); | ||||
40 | 0 | return true; | |||||
41 | } | ||||||
42 | |||||||
43 | 1; | ||||||
44 | |||||||
45 | =pod | ||||||
46 | |||||||
47 | =head1 NAME | ||||||
48 | |||||||
49 | Etcd::Lock - Lock based on etcd | ||||||
50 | |||||||
51 | =for html
|
||||||
52 | |||||||
53 | |
||||||
54 | |||||||
55 | |
||||||
56 | |
||||||
57 | |||||||
58 | |||||||
59 | =head1 VERSION | ||||||
60 | |||||||
61 | version 0.02 | ||||||
62 | |||||||
63 | =head1 SYNOPSIS | ||||||
64 | |||||||
65 | use Etcd::Lock | ||||||
66 | |||||||
67 | my $etcdLock = Etcd::Lock->new(host => 'host.name.com', key => 'lock_key'); | ||||||
68 | |||||||
69 | =head1 DESCRIPTION | ||||||
70 | |||||||
71 | Etcd::Lock is a lock based on etcd | ||||||
72 | |||||||
73 | =encoding UTF-8 | ||||||
74 | |||||||
75 | =head1 BUGS/CONTRIBUTING | ||||||
76 | |||||||
77 | Please report any bugs through the web interface at L |
||||||
78 | |||||||
79 | If you want to contribute changes or otherwise involve yourself in development, feel free to fork the Git repository from | ||||||
80 | L |
||||||
81 | |||||||
82 | =head1 SUPPORT | ||||||
83 | |||||||
84 | You can find this documentation with the perldoc command too. | ||||||
85 | |||||||
86 | perldoc etcd-lock | ||||||
87 | |||||||
88 | =head1 AUTHOR | ||||||
89 | |||||||
90 | Emiliano Bruni |
||||||
91 | |||||||
92 | =head1 COPYRIGHT AND LICENSE | ||||||
93 | |||||||
94 | This software is copyright (c) 2022 by Emiliano Bruni. | ||||||
95 | |||||||
96 | This is free software; you can redistribute it and/or modify it under | ||||||
97 | the same terms as the Perl 5 programming language system itself. | ||||||
98 | |||||||
99 | =cut | ||||||
100 | |||||||
101 | __END__ |