X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=src%2FPVE%2FHA%2FEnv.pm;h=a173deba47f57de3fb7e9f7721b8fe6311e81094;hb=ed408b449128239641048f315cd5849ab90da8bd;hp=b345f682c6fbd0fc2275793abb5e1d33c9a0ca5d;hpb=119656b9406a61c76c339ce865a40a8b3b81a583;p=pve-ha-manager.git diff --git a/src/PVE/HA/Env.pm b/src/PVE/HA/Env.pm index b345f68..a173deb 100644 --- a/src/PVE/HA/Env.pm +++ b/src/PVE/HA/Env.pm @@ -26,6 +26,12 @@ sub nodename { return $self->{plug}->nodename(); } +sub hardware { + my ($self) = @_; + + return $self->{plug}->hardware(); +} + # manager status is stored on cluster, protected by ha_manager_lock sub read_manager_status { my ($self) = @_; @@ -54,6 +60,14 @@ sub write_lrm_status { return $self->{plug}->write_lrm_status($status_obj); } +# check if we do node shutdown +# we used this to decide if services should be stopped or freezed +sub is_node_shutdown { + my ($self) = @_; + + return $self->{plug}->is_node_shutdown(); +} + # implement a way to send commands to the CRM master sub queue_crm_commands { my ($self, $cmd) = @_; @@ -73,10 +87,35 @@ sub read_service_config { return $self->{plug}->read_service_config(); } -sub change_service_location { +sub parse_sid { + my ($self, $sid) = @_; + + return $self->{plug}->parse_sid($sid); +} + +sub read_fence_config { + my ($self) = @_; + + return $self->{plug}->read_fence_config(); +} + +sub fencing_mode { + my ($self) = @_; + + return $self->{plug}->fencing_mode(); +} + +sub exec_fence_agent { + my ($self, $agent, $node, @param) = @_; + + return $self->{plug}->exec_fence_agent($agent, $node, @param); +} + +# this is normally only allowed by the master to recover a _fenced_ service +sub steal_service { my ($self, $sid, $current_node, $new_node) = @_; - return $self->{plug}->change_service_location($sid, $current_node, $new_node); + return $self->{plug}->steal_service($sid, $current_node, $new_node); } sub read_group_config { @@ -99,20 +138,44 @@ sub log { return $self->{plug}->log($level, @args); } -# aquire a cluster wide manager lock +sub sendmail { + my ($self, $subject, $text) = @_; + + return $self->{plug}->sendmail($subject, $text); +} + +# acquire a cluster wide manager lock sub get_ha_manager_lock { my ($self) = @_; return $self->{plug}->get_ha_manager_lock(); } -# aquire a cluster wide node agent lock +# release the cluster wide manager lock. +# when released another CRM may step up and get the lock, thus this should only +# get called when shutting down/deactivating the current master +sub release_ha_manager_lock { + my ($self) = @_; + + return $self->{plug}->release_ha_manager_lock(); +} + +# acquire a cluster wide node agent lock sub get_ha_agent_lock { my ($self, $node) = @_; return $self->{plug}->get_ha_agent_lock($node); } +# release the respective node agent lock. +# this should only get called if the nodes LRM gracefully shuts down with +# all services already cleanly stopped! +sub release_ha_agent_lock { + my ($self) = @_; + + return $self->{plug}->release_ha_agent_lock(); +} + # return true when cluster is quorate sub quorate { my ($self) = @_; @@ -152,6 +215,12 @@ sub loop_end_hook { return $self->{plug}->loop_end_hook(@args); } +sub cluster_state_update { + my ($self) = @_; + + return $self->{plug}->cluster_state_update(); +} + sub watchdog_open { my ($self) = @_; @@ -173,17 +242,25 @@ sub watchdog_close { return $self->{plug}->watchdog_close($wfh); } -sub exec_resource_agent { - my ($self, $sid, $service_config, $cmd, @params) = @_; +sub after_fork { + my ($self) = @_; + + return $self->{plug}->after_fork(); +} + +# maximal number of workers to fork, +# return 0 as a hack to support regression tests +sub get_max_workers { + my ($self) = @_; - return $self->{plug}->exec_resource_agent($sid, $service_config, $cmd, @params) + return $self->{plug}->get_max_workers(); } -# hack to support regression tests -sub can_fork { +# return cluster wide enforced HA settings +sub get_ha_settings { my ($self) = @_; - return $self->{plug}->can_fork(); + return $self->{plug}->get_ha_settings(); } 1;