File Coverage

blib/lib/ResourcePool/LoadBalancer/FailOver.pm
Criterion Covered Total %
statement 29 30 96.6
branch 10 12 83.3
condition 7 9 77.7
subroutine 4 4 100.0
pod 0 2 0.0
total 50 57 87.7


line stmt bran cond sub pod time code
1             #*********************************************************************
2             #*** ResourcePool::LoadBalancer::FailOver
3             #*** Copyright (c) 2002,2003 by Markus Winand
4             #*** $Id: FailOver.pm,v 1.4 2013-04-16 10:14:44 mws Exp $
5             #*********************************************************************
6              
7             package ResourcePool::LoadBalancer::FailOver;
8              
9 1     1   6 use vars qw($VERSION @ISA);
  1         1  
  1         77  
10 1     1   7 use ResourcePool::LoadBalancer;
  1         2  
  1         612  
11              
12             $VERSION = "1.0107";
13             push @ISA, "ResourcePool::LoadBalancer";
14              
15             sub get_once($) {
16 44     44 0 60 my ($self) = @_;
17 44         49 my ($rec, $r_pool);
18 44         60 my $i = $self->{failover_pos};
19 44 100       94 if (! defined $i) {
20 1         2 $i = 0;
21             }
22 44         61 my $try = $self->{PoolArraySize};
23              
24 44   66     50 do { # get first not suspended pool
      66        
25 46         98 $r_pool = $self->{PoolArray}->[$i % $self->{PoolArraySize}];
26 46         198 $i++;
27             } while (defined $r_pool && $self->chk_suspend($r_pool) && ($try-- > 0)) ;
28              
29 44 50       95 if (defined $r_pool) { #
30 44         137 $rec = $r_pool->{pool}->get();
31 44 100       226 if (! defined $rec) {
32 1         13 $self->suspend($r_pool);
33             }
34              
35 44 100 100     348 if (defined $self->{LastUsedPool} && $r_pool != $self->{LastUsedPool}) {
36 2         9 $self->{LastUsedPool}->{pool}->downsize();
37             }
38 44         79 $self->{LastUsedPool} = $r_pool;
39             }
40 44 100       149 if (! defined $rec) {
41 1         3 undef $r_pool;
42             }
43 44         81 $self->{failover_pos} = ($i - 1) % $self->{PoolArraySize};
44 44         405 return ($rec, $r_pool);
45             }
46              
47             sub free_policy($$) {
48 41     41 0 68 my ($self, $r_pool) = @_;
49              
50 41 50       104 if ($r_pool != $self->{LastUsedPool}) {
51 0         0 $self->{LastUsedPool}->{pool}->downsize();
52             }
53 41         186 return 1;
54             }
55              
56              
57             1;