]>
git.proxmox.com Git - pve-ha-manager.git/blob - src/PVE/HA/Sim/TestEnv.pm
1 package PVE
::HA
::Sim
::TestEnv
;
5 use POSIX
qw(strftime EINTR);
9 use Fcntl
qw(:DEFAULT :flock);
13 use base
qw(PVE::HA::Sim::Env);
16 my ($this, $nodename, $hardware, $log_id) = @_;
18 my $class = ref($this) || $this;
20 my $self = $class->SUPER::new
($nodename, $hardware, $log_id);
22 $self->{cur_time
} = 0;
23 $self->{loop_delay
} = 0;
25 my $statusdir = $self->{hardware
}->statusdir();
26 my $logfile = "$statusdir/log";
27 $self->{logfh
} = IO
::File-
>new(">>$logfile") ||
28 die "unable to open '$logfile' - $!";
36 return $self->{cur_time
};
40 my ($self, $level, $msg) = @_;
44 my $time = $self->get_time();
46 my $line = sprintf("%-5s %5d %12s: $msg\n", $level, $time, "$self->{nodename}/$self->{log_id}");
49 $self->{logfh
}->print($line);
50 $self->{logfh
}->flush();
54 my ($self, $delay) = @_;
56 $self->{loop_delay
} += $delay;
60 my ($self, $end_time) = @_;
62 my $cur_time = $self->{cur_time
} + $self->{loop_delay
};
64 return if $cur_time >= $end_time;
66 $self->{loop_delay
} += $end_time - $cur_time;
69 sub get_ha_manager_lock
{
72 my $res = $self->SUPER::get_ha_manager_lock
();
73 ++$self->{loop_delay
};
77 sub get_ha_agent_lock
{
78 my ($self, $node) = @_;
80 my $res = $self->SUPER::get_ha_agent_lock
($node);
81 ++$self->{loop_delay
};
87 my ($self, $starttime) = @_;
89 $self->{loop_delay
} = 0;
91 die "no starttime" if !defined($starttime);
92 die "strange start time" if $starttime < $self->{cur_time
};
94 $self->{cur_time
} = $starttime;
102 my $delay = $self->{loop_delay
};
103 $self->{loop_delay
} = 0;
105 die "loop take too long ($delay seconds)\n" if $delay > 30;
107 # $self->{cur_time} += $delay;
109 $self->{cur_time
} += 1; # easier for simulation
112 sub is_node_shutdown
{
115 my $node = $self->{nodename
};
116 my $cstatus = $self->{hardware
}->read_hardware_status_nolock();
118 die "undefined node status for node '$node'" if !defined($cstatus->{$node});
120 return defined($cstatus->{$node}->{shutdown}) ?
1 : 0;
123 # must be 0 as we do not want to fork in the regression tests
124 sub get_max_workers
{