Merge lp:~y-trudeau/mysql-mmm/NonBlocking into lp:~gryp/mysql-mmm/mysql-mmm-MoveSlavesMoreConsistent

Proposed by Kenny Gryp
Status: Merged
Approved by: Kenny Gryp
Approved revision: 149
Merged at revision: 152
Proposed branch: lp:~y-trudeau/mysql-mmm/NonBlocking
Merge into: lp:~gryp/mysql-mmm/mysql-mmm-MoveSlavesMoreConsistent
Diff against target: 115 lines (+53/-37)
1 file modified
lib/Monitor/Agent.pm (+53/-37)
To merge this branch: bzr merge lp:~y-trudeau/mysql-mmm/NonBlocking
Reviewer Review Type Date Requested Status
Kenny Gryp Approve
Review via email: mp+62370@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Kenny Gryp (gryp) wrote :

ok

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/Monitor/Agent.pm'
--- lib/Monitor/Agent.pm 2009-10-27 12:48:10 +0000
+++ lib/Monitor/Agent.pm 2011-05-25 20:28:35 +0000
@@ -5,6 +5,7 @@
5use Log::Log4perl qw(:easy);5use Log::Log4perl qw(:easy);
6use MMM::Common::Socket;6use MMM::Common::Socket;
7use MMM::Monitor::ChecksStatus;7use MMM::Monitor::ChecksStatus;
8use POSIX ':signal_h';
89
9our $VERSION = '0.01';10our $VERSION = '0.01';
1011
@@ -69,7 +70,6 @@
69 my $cmd = shift;70 my $cmd = shift;
70 my @params = @_;71 my @params = @_;
7172
72
73 my $checks_status = MMM::Monitor::ChecksStatus->instance();73 my $checks_status = MMM::Monitor::ChecksStatus->instance();
74 unless ($checks_status->ping($self->host)) {74 unless ($checks_status->ping($self->host)) {
75 return 0;75 return 0;
@@ -77,43 +77,59 @@
7777
78 DEBUG sprintf("Sending command '%s(%s)' to %s (%s:%s)", $cmd, join(', ', @params), $self->host, $self->ip, $self->port);78 DEBUG sprintf("Sending command '%s(%s)' to %s (%s:%s)", $cmd, join(', ', @params), $self->host, $self->ip, $self->port);
7979
80 my $socket;80 my $mask = POSIX::SigSet->new( SIGALRM );
81CONNECT: {81 my $action = POSIX::SigAction->new(
82 $socket = MMM::Common::Socket::create_sender($self->ip, $self->port, 10);82 sub { DEBUG "Alarm triggered while sending command";
83 unless ($socket && $socket->connected) {83 die 'Timeout'; },
84 redo CONNECT if ($!{EINTR});84 $mask,
85 return 0;85 );
86 }86 my $oldaction = POSIX::SigAction->new();
87}87 sigaction( SIGALRM, $action, $oldaction );
8888
8989 eval {
90 print $socket join('|', $cmd, main::MMM_PROTOCOL_VERSION, $self->host, @params), "\n";90
9191 alarm(15); # Alarm defined at 15s
92 my $res;92 my $socket;
93READ: {
94 $res = <$socket>;
95 redo READ if !$res && $!{EINTR};
96}
97 close($socket);
98
99 unless (defined($res)) {
100 WARN sprintf('Received undefined answer from host %s. $!: %s', $self->host, $!);
101 return 0;
102 }
103
104 DEBUG "Received Answer: $res";
105
106 if ($res =~ /(.*)\|UP:(.*)/) {
107 $res = $1;
108 my $uptime = $2;
109 $self->uptime($uptime);
110 $self->last_uptime($uptime) if ($self->state eq 'ONLINE');
111 }
112 else {
113 WARN sprintf('Received bad answer \'%s\' from host %s. $!: %s', $res, $self->host, $!);
114 }
115 93
116 return $res;94 CONNECT: {
95 $socket = MMM::Common::Socket::create_sender($self->ip, $self->port, 10);
96 unless ($socket && $socket->connected) {
97 redo CONNECT if ($!{EINTR});
98 alarm(0);
99 return 0;
100 }
101 }
102
103 print $socket join('|', $cmd, main::MMM_PROTOCOL_VERSION, $self->host, @params), "\n";
104
105 my $res = '';
106 READ: {
107 $res = <$socket>;
108 redo READ if !$res && $!{EINTR};
109 }
110
111 unless (defined($res)) {
112 WARN sprintf('Received undefined answer from host %s. $!: %s', $self->host, $!);
113 alarm(0);
114 return 0;
115 }
116 close($socket);
117 alarm(0);
118
119 DEBUG "Received Answer: $res";
120
121 if ($res =~ /(.*)\|UP:(.*)/) {
122 $res = $1;
123 my $uptime = $2;
124 $self->uptime($uptime);
125 $self->last_uptime($uptime) if ($self->state eq 'ONLINE');
126 }
127 else {
128 WARN sprintf('Received bad answer \'%s\' from host %s. $!: %s', $res, $self->host, $!);
129 }
130
131 return $res;
132 }
117}133}
118134
119sub _send_command_retry {135sub _send_command_retry {

Subscribers

People subscribed via source and target branches

to all changes: