# aquire a cluster wide node agent lock
sub get_ha_agent_lock {
- my ($self) = @_;
-
- return $self->{plug}->get_ha_agent_lock();
-}
-
-# same as get_ha_agent_lock(), but immeditaley release the lock on success
-sub test_ha_agent_lock {
my ($self, $node) = @_;
- return $self->{plug}->test_ha_agent_lock($node);
+ return $self->{plug}->get_ha_agent_lock($node);
}
# return true when cluster is quorate
}
sub get_ha_agent_lock {
- my ($self) = @_;
-
- my $node = $self->nodename();
-
- return $self->get_pve_lock("ha_agent_${node}_lock");
-}
-
-sub test_ha_agent_lock {
my ($self, $node) = @_;
- my $lockid = "ha_agent_${node}_lock";
- my $filename = "$lockdir/$lockid";
- my $res = $self->get_pve_lock($lockid);
- rmdir $filename if $res; # cfs unlock
+ $node = $self->nodename() if !defined($node);
- return $res;
+ return $self->get_pve_lock("ha_agent_${node}_lock");
}
sub quorate {
use warnings;
use POSIX qw(strftime EINTR);
use Data::Dumper;
-use JSON;
+use JSON;
use IO::File;
use Fcntl qw(:DEFAULT :flock);
die "missing nodename" if !$nodename;
die "missing log_id" if !$log_id;
-
+
my $class = ref($this) || $this;
my $self = bless {}, $class;
my $code = sub {
- my $data = PVE::HA::Tools::read_json_from_file($filename, {});
+ my $data = PVE::HA::Tools::read_json_from_file($filename, {});
my $res;
if (my $d = $data->{$lock_name}) {
my $tdiff = $ctime - $d->{time};
-
+
if ($tdiff > $self->{lock_timeout}) {
$res = 1;
} elsif (($tdiff <= $self->{lock_timeout}) && ($d->{node} eq $nodename)) {
} else {
if (my $d = $data->{$lock_name}) {
-
+
my $tdiff = $ctime - $d->{time};
-
+
if ($tdiff <= $self->{lock_timeout}) {
if ($d->{node} eq $nodename) {
$d->{time} = $ctime;
}
}
- PVE::HA::Tools::write_json_to_file($filename, $data);
+ PVE::HA::Tools::write_json_to_file($filename, $data);
return $res;
};
sub read_manager_status {
my ($self) = @_;
-
+
my $filename = "$self->{statusdir}/manager_status";
- return PVE::HA::Tools::read_json_from_file($filename, {});
+ return PVE::HA::Tools::read_json_from_file($filename, {});
}
sub write_manager_status {
my $filename = "$self->{statusdir}/manager_status";
- PVE::HA::Tools::write_json_to_file($filename, $status_obj);
+ PVE::HA::Tools::write_json_to_file($filename, $status_obj);
}
sub read_lrm_status {
}
sub get_ha_agent_lock {
- my ($self) = @_;
-
- my $lck = $self->get_ha_agent_lock_name();
- return $self->sim_get_lock($lck);
-}
-
-sub test_ha_agent_lock {
my ($self, $node) = @_;
my $lck = $self->get_ha_agent_lock_name($node);
- my $res = $self->sim_get_lock($lck);
- $self->sim_get_lock($lck, 1) if $res; # unlock
- return $res;
+ return $self->sim_get_lock($lck);
}
# return true when cluster is quorate