]> git.proxmox.com Git - pve-ha-manager.git/log
pve-ha-manager.git
17 months agobump version to 3.5.1
Thomas Lamprecht [Sat, 19 Nov 2022 14:51:16 +0000 (15:51 +0100)]
bump version to 3.5.1

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agoapi: status: add CRS info to manager if not set to default
Thomas Lamprecht [Sat, 19 Nov 2022 14:27:09 +0000 (15:27 +0100)]
api: status: add CRS info to manager if not set to default

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agomanager: slightly clarify log message for fallback on init-failure
Thomas Lamprecht [Sat, 19 Nov 2022 13:15:36 +0000 (14:15 +0100)]
manager: slightly clarify log message for fallback on init-failure

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agoapi: status: code and indentation cleanup
Thomas Lamprecht [Sat, 19 Nov 2022 13:00:51 +0000 (14:00 +0100)]
api: status: code and indentation cleanup

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agomanager: make crs a full blown hash
Thomas Lamprecht [Sat, 19 Nov 2022 14:38:05 +0000 (15:38 +0100)]
manager: make crs a full blown hash

To support potential more CRS settings more easily.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agomanager: update crs scheduling mode once per round
Thomas Lamprecht [Sat, 19 Nov 2022 12:36:57 +0000 (13:36 +0100)]
manager: update crs scheduling mode once per round

Pretty safe to do as we recompute everything per round anyway (and
much more often on top of that, but that's another topic).

Actually I'd argue that it's safer as this way a user doesn't need to
actively restart the manager, which grinds much more gears and
watchdog changes than checking periodically and updating it
internally. Plus, a lot of admins won't expect that they need to
restart the current active master and thus they'll complain that
their recently made change to the CRS config had no effect/the CRS
doesn't work at all.

We should codify such a change in test for this though.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agomanager: factor out setting crs scheduling mode
Thomas Lamprecht [Sat, 19 Nov 2022 12:36:28 +0000 (13:36 +0100)]
manager: factor out setting crs scheduling mode

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agomanager: various code style cleanups
Thomas Lamprecht [Sat, 19 Nov 2022 12:06:03 +0000 (13:06 +0100)]
manager: various code style cleanups

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agobump version to 3.5.0
Thomas Lamprecht [Fri, 18 Nov 2022 14:03:00 +0000 (15:03 +0100)]
bump version to 3.5.0

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agomanager: better convey that basic is always the fallback
Thomas Lamprecht [Fri, 18 Nov 2022 13:24:25 +0000 (14:24 +0100)]
manager: better convey that basic is always the fallback

to hint to a potential "code optimizer" that it may not be easily
moved above to the scheduling selection

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agod/control: add (build-)dependency for libpve-rs-perl
Thomas Lamprecht [Fri, 18 Nov 2022 12:44:43 +0000 (13:44 +0100)]
d/control: add (build-)dependency for libpve-rs-perl

to ensure we got the perlmod for the basic scheduler available.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
17 months agoresources: add missing PVE::Cluster use statements
Fiona Ebner [Thu, 17 Nov 2022 14:00:16 +0000 (15:00 +0100)]
resources: add missing PVE::Cluster use statements

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agotest: add tests for static resource scheduling
Fiona Ebner [Thu, 17 Nov 2022 14:00:15 +0000 (15:00 +0100)]
test: add tests for static resource scheduling

See the READMEs for more information about the tests.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agousage: static: use service count on nodes as a fallback
Fiona Ebner [Thu, 17 Nov 2022 14:00:14 +0000 (15:00 +0100)]
usage: static: use service count on nodes as a fallback

if something goes wrong with the TOPSIS scoring. Not expected to
happen, but it's rather cheap to be on the safe side.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agomanager: avoid scoring nodes when not trying next and current node is valid
Fiona Ebner [Thu, 17 Nov 2022 14:00:13 +0000 (15:00 +0100)]
manager: avoid scoring nodes when not trying next and current node is valid

With the Usage::Static plugin, scoring is not as cheap anymore and
select_service_node() is called for each running service.

This should cover most calls of select_service_node().

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agomanager: avoid scoring nodes if maintenance fallback node is valid
Fiona Ebner [Thu, 17 Nov 2022 14:00:12 +0000 (15:00 +0100)]
manager: avoid scoring nodes if maintenance fallback node is valid

With the Usage::Static plugin, scoring is not as cheap anymore and
select_service_node() is called for each running service.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agomanager: use static resource scheduler when configured
Fiona Ebner [Thu, 17 Nov 2022 14:00:11 +0000 (15:00 +0100)]
manager: use static resource scheduler when configured

Note that recompute_online_node_usage() becomes much slower when the
'static' resource scheduler mode is used. Tested it with ~300 HA
services (minimal containers) running on my virtual test cluster.

Timings with 'basic' mode were between 0.0004 - 0.001 seconds
Timings with 'static' mode were between 0.007 - 0.012 seconds

Combined with the fact that recompute_online_node_usage() is currently
called very often this can lead to a lot of delay during recovery
situations with hundreds of services and low thousands of services
overall and with genereous estimates even run into the watchdog timer.

Ideas to remedy this is using PVE::Cluster's
get_guest_config_properties() instead of load_config() and/or
optimizing how often recompute_online_node_usage() is called.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agomanager: set resource scheduler mode upon init
Fiona Ebner [Thu, 17 Nov 2022 14:00:10 +0000 (15:00 +0100)]
manager: set resource scheduler mode upon init

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agoenv: datacenter config: include crs (cluster-resource-scheduling) setting
Fiona Ebner [Thu, 17 Nov 2022 14:00:09 +0000 (15:00 +0100)]
env: datacenter config: include crs (cluster-resource-scheduling) setting

Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agoenv: rename get_ha_settings to get_datacenter_settings
Fiona Ebner [Thu, 17 Nov 2022 14:00:08 +0000 (15:00 +0100)]
env: rename get_ha_settings to get_datacenter_settings

The method will be extended to include other HA-relevant settings from
datacenter.cfg.

Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agousage: add Usage::Static plugin
Fiona Ebner [Thu, 17 Nov 2022 14:00:07 +0000 (15:00 +0100)]
usage: add Usage::Static plugin

for calculating node usage of services based upon static CPU and
memory configuration as well as scoring the nodes with that
information to decide where to start a new or recovered service.

For getting the service stats, it's necessary to also consider the
migration target (if present), becuase the configuration file might
have already moved.

It's necessary to update the cluster filesystem upon stealing the
service to be able to always read the moved config right away when
adding the usage.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agomanager: online node usage: switch to Usage::Basic plugin
Fiona Ebner [Thu, 17 Nov 2022 14:00:06 +0000 (15:00 +0100)]
manager: online node usage: switch to Usage::Basic plugin

no functional change is intended.

One test needs adaptation too, because it created its own version of
$online_node_usage.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agomanager: select service node: add $sid to parameters
Fiona Ebner [Thu, 17 Nov 2022 14:00:05 +0000 (15:00 +0100)]
manager: select service node: add $sid to parameters

In preparation for scheduling based on static information, where the
scoring of nodes depends on information from the service's
VM/CT configuration file (and the $sid is required to query that).

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agoadd Usage base plugin and Usage::Basic plugin
Fiona Ebner [Thu, 17 Nov 2022 14:00:04 +0000 (15:00 +0100)]
add Usage base plugin and Usage::Basic plugin

in preparation to also support static resource scheduling via another
such Usage plugin.

The interface is designed in anticipation of the Usage::Static plugin,
the Usage::Basic plugin doesn't require all parameters.

In Usage::Static, the $haenv will necessary for logging and getting
the static node stats. add_service_usage_to_node() and
score_nodes_to_start_service() take the sid, service node and the
former also the optional migration target (during a migration it's not
clear whether the config file has already been moved or not) to be
able to get the static service stats.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agoresources: add get_static_stats() method
Fiona Ebner [Thu, 17 Nov 2022 14:00:03 +0000 (15:00 +0100)]
resources: add get_static_stats() method

to be used for static resource scheduling.

In container's vmstatus(), the 'cores' option takes precedence over
the 'cpulimit' one, but it felt more accurate to prefer 'cpulimit'
here.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
17 months agoenv: add get_static_node_stats() method
Fiona Ebner [Thu, 17 Nov 2022 14:00:02 +0000 (15:00 +0100)]
env: add get_static_node_stats() method

to be used for static resource scheduling. In the simulation
environment, the information can be added in hardware_status.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
21 months agofixup variable name typo
Thomas Lamprecht [Fri, 22 Jul 2022 10:39:27 +0000 (12:39 +0200)]
fixup variable name typo

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
21 months agomanager: add top level comment section to explain common variables
Thomas Lamprecht [Fri, 22 Jul 2022 10:15:55 +0000 (12:15 +0200)]
manager: add top level comment section to explain common variables

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
21 months agod/lintian-overrides: update for newer lintian
Thomas Lamprecht [Fri, 22 Jul 2022 08:06:47 +0000 (10:06 +0200)]
d/lintian-overrides: update for newer lintian

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
21 months agobump version to 3.4.0
Thomas Lamprecht [Fri, 22 Jul 2022 07:22:47 +0000 (09:22 +0200)]
bump version to 3.4.0

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
21 months agomanager: online node usage: factor out possible traget and future proof
Thomas Lamprecht [Fri, 22 Jul 2022 07:12:37 +0000 (09:12 +0200)]
manager: online node usage: factor out possible traget and future proof

only count up target selection if that node is already in the online
node usage list, to avoid that a offline node is considered online if
its a target from any command

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
21 months agotest: update pre-existing policy tests for fixed balancing spread
Thomas Lamprecht [Fri, 22 Jul 2022 06:49:41 +0000 (08:49 +0200)]
test: update pre-existing policy tests for fixed balancing spread

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
21 months agofix variable name typo
Thomas Lamprecht [Fri, 22 Jul 2022 05:25:02 +0000 (07:25 +0200)]
fix variable name typo

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
21 months agofix spreading out services if source node isnt operational but otherwise ok
Thomas Lamprecht [Thu, 21 Jul 2022 16:14:32 +0000 (18:14 +0200)]
fix spreading out services if source node isnt operational but otherwise ok

as its the case for going into maintenance mode

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
21 months agotests: add shutdown policy scenario with multiple guests to spread out
Thomas Lamprecht [Thu, 21 Jul 2022 16:09:38 +0000 (18:09 +0200)]
tests: add shutdown policy scenario with multiple guests to spread out

currently wrong as online_node_usage doesn't considers counting the
target node if the source node isn't considered online (=
operational) anymore

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 3.3-4
Thomas Lamprecht [Wed, 27 Apr 2022 12:02:22 +0000 (14:02 +0200)]
bump version to 3.3-4

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agolrm: fix getting stuck on restart
Fabian Grünbichler [Wed, 27 Apr 2022 10:19:55 +0000 (12:19 +0200)]
lrm: fix getting stuck on restart

run_workers is responsible for updating the state after workers have
exited. if the current LRM state is 'active', but a shutdown_request was
issued in 'restart' mode (like on package upgrades), this call is the
only one made in the LRM work() loop.

skipping it if there are active services means the following sequence of
events effectively keeps the LRM from restarting or making any progress:

- start HA migration on node A
- reload LRM on node A while migration is still running

even once the migration is finished, the service count is still >= 1
since the LRM never calls run_workers (directly or via
manage_resources), so the service having been migrated is never noticed.

maintenance mode (i.e., rebooting the node with shutdown policy migrate)
does call manage_resources and thus run_workers, and will proceed once
the last worker has exited.

reported by a user:

https://forum.proxmox.com/threads/lrm-hangs-when-updating-while-migration-is-running.108628

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2 years agobuildsys: track and upload debug package
Thomas Lamprecht [Thu, 20 Jan 2022 17:08:27 +0000 (18:08 +0100)]
buildsys: track and upload debug package

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 3.3-3
Thomas Lamprecht [Thu, 20 Jan 2022 17:05:37 +0000 (18:05 +0100)]
bump version to 3.3-3

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agolrm: increase run_worker loop-time parition
Thomas Lamprecht [Thu, 20 Jan 2022 15:09:37 +0000 (16:09 +0100)]
lrm: increase run_worker loop-time parition

every LRM round is scheduled to run for 10s but we spend only half
of that to actively trying to run workers (in the max_worker limit).

Raise that to 80% duty cycle.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agolrm: avoid job starvation on huge workloads
Thomas Lamprecht [Thu, 20 Jan 2022 14:35:02 +0000 (15:35 +0100)]
lrm: avoid job starvation on huge workloads

If a setup has a lot VMs we may run into the time limit from the
run_worker loop before processing all workers, which can easily
happen if an admin did not increased their default of max_workers in
the setup, but even with a bigger max_worker setting one can run into
it.

That combined with the fact that we sorted just by the $sid
alpha-numerically means that CTs where preferred over VMs (C comes
before V) and additionally lower VMIDs where preferred too.

That means that a set of SIDs had a lower chance of ever get actually
run, which is naturally not ideal at all.
Improve on that behavior by adding a counter to the queued worker and
preferring those that have a higher one, i.e., spent more time
waiting on getting actively run.

Note, due to the way the stop state is enforced, i.e., always
enqueued as new worker, its start-try counter will be reset every
round and thus have a lower priority compared to other request
states. We probably want to differ between a stop request when the
service is/was in another state just before and the time a stop is
just re-requested even if a service was already stopped for a while.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agolrm: code/style cleanups
Thomas Lamprecht [Thu, 20 Jan 2022 13:40:27 +0000 (14:40 +0100)]
lrm: code/style cleanups

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agolrm: run worker: avoid an indendation level
Thomas Lamprecht [Thu, 20 Jan 2022 12:41:24 +0000 (13:41 +0100)]
lrm: run worker: avoid an indendation level

best viewed with the `-w` flag to ignore whitespace change itself

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agolrm: log actual error if fork fails
Thomas Lamprecht [Thu, 20 Jan 2022 12:39:35 +0000 (13:39 +0100)]
lrm: log actual error if fork fails

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agomanager: refactor fence processing and rework fence-but-no-service log
Thomas Lamprecht [Thu, 20 Jan 2022 12:31:04 +0000 (13:31 +0100)]
manager: refactor fence processing and rework fence-but-no-service log

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/changelog: s/nodes/services/
Thomas Lamprecht [Thu, 20 Jan 2022 09:10:27 +0000 (10:10 +0100)]
d/changelog: s/nodes/services/

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 3.3-2
Thomas Lamprecht [Wed, 19 Jan 2022 13:30:19 +0000 (14:30 +0100)]
bump version to 3.3-2

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agomanage: handle edge case where a node gets stuck in 'fence' state
Fabian Ebner [Fri, 8 Oct 2021 12:52:26 +0000 (14:52 +0200)]
manage: handle edge case where a node gets stuck in 'fence' state

If all services in 'fence' state are gone from a node (e.g. by
removing the services) before fence_node() was successful, a node
would get stuck in the 'fence' state. Avoid this by calling
fence_node() if the node is in 'fence' state, regardless of service
state.

Reported in the community forum:
https://forum.proxmox.com/threads/ha-migration-stuck-is-doing-nothing.94469/

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
[ T: track test change of new test ]
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agolrm: also check CRM node-status for determining fence-request
Thomas Lamprecht [Mon, 17 Jan 2022 14:52:53 +0000 (15:52 +0100)]
lrm: also check CRM node-status for determining fence-request

This fixes point 2. of commit 3addeeb - avoiding that a LRM goes
active as long as the CRM still has it in (pending) `fence` state,
which can happen after a watchdog reset + fast boot. This avoids that
we interfere with the CRM acquiring the lock, which is all the more
important once a future commit gets added that ensures a node isn't
stuck in `fence` state if there's no service configured (anymore) due
to admin manually removing them during fencing.

We explicitly fix the startup first to better show how it works in
the test framework, but as the test/sim hardware can now delay the
CRM now while keeping LRM running, the second test (i.e.,
test-service-command9) should still trigger after the next commit, if
this one would be reverted or broken otherwise.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agolrm: factor out fence-request check into own helper
Thomas Lamprecht [Mon, 17 Jan 2022 14:48:27 +0000 (15:48 +0100)]
lrm: factor out fence-request check into own helper

we'll extend that a bit in a future commit

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agotest: cover case where all service get removed from in-progress fenced node
Thomas Lamprecht [Mon, 17 Jan 2022 11:25:35 +0000 (12:25 +0100)]
test: cover case where all service get removed from in-progress fenced node

this test's log is showing up two issues we'll fix in later commits

1. If a node gets fenced and an admin removes all services before the
   fencing completes, the manager will ignore that node's state and
   thus never make the "fence" -> "unknown" transition required by
   the state machine

2. If a node is marked as "fence" in the manager's node status, but
   has no service, its LRM's check for "pending fence request"
   returns a false negative and the node start trying to acquire its
   LRM work lock. This can even succeed in practice, e.g. the events:
    1. Node A gets fenced (whyever that is), CRM is working on
       acquiring its lock while Node A reboots
    2. Admin is present and removes all services of Node A from HA
    2. Node A booted up fast again, LRM is already starting before
       CRM could ever get the lock (<< 2 minutes)
    3. Service located on Node A gets added to HA (again)
    4. LRM of Node A will actively try to get lock as it has no
       service in fence state and is (currently) not checking the
       manager's node state, so is ignorant of the not yet processed
       fence -> unknown transition
    (note: above uses 2. twice as those points order doesn't matter)

    As a result the CRM may never get to acquire the lock of Node A's
    LRM, and thus cannot finish the fence -> unknown transition,
    resulting in user confusion and possible weird effects.

I the current log one can observe 1. by the missing fence tries of
the master and 2. can be observed by the LRM acquiring the lock while
still being in "fence" state from the masters POV.

We use two tests so that point 2. is better covered later on

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agosim: implement skip-round command for crm/lrm
Thomas Lamprecht [Wed, 19 Jan 2022 09:55:29 +0000 (10:55 +0100)]
sim: implement skip-round command for crm/lrm

This allows to simulate situations where there's some asymmetry
required in service type scheduling, e.g., if we the master should
not pickup LRM changes just yet - something that can happen quite
often in the real world due to scheduling not being predictable,
especially across different hosts.

The implementation is pretty simple for now, that also means we just
do not care about watchdog updates for the skipped service, meaning
that one is limited to skip two 20s rounds max before self-fencing
kicks in.

This can be made more advanced once required.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agosim: test hw: small code cleanups and whitespace fixes
Thomas Lamprecht [Tue, 18 Jan 2022 14:33:41 +0000 (15:33 +0100)]
sim: test hw: small code cleanups and whitespace fixes

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agosim: service add command: allow to override state
Thomas Lamprecht [Mon, 17 Jan 2022 14:45:20 +0000 (15:45 +0100)]
sim: service add command: allow to override state

Until now we had at most one extra param, so lets get the all
remaining params in an array and use that, fallback staid the same.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agosim: add service: set type/name in config
Thomas Lamprecht [Mon, 17 Jan 2022 14:47:19 +0000 (15:47 +0100)]
sim: add service: set type/name in config

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agotest/sim: also log delay commands
Thomas Lamprecht [Wed, 19 Jan 2022 10:17:24 +0000 (11:17 +0100)]
test/sim: also log delay commands

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agosim/hardware: sort and split use statements
Thomas Lamprecht [Mon, 17 Jan 2022 14:43:48 +0000 (15:43 +0100)]
sim/hardware: sort and split use statements

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agolrm: fix comment typos
Thomas Lamprecht [Mon, 17 Jan 2022 14:43:03 +0000 (15:43 +0100)]
lrm: fix comment typos

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agocrm: code/style cleanup
Thomas Lamprecht [Mon, 17 Jan 2022 11:27:30 +0000 (12:27 +0100)]
crm: code/style cleanup

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/postinst: fix restarting LRM/CRM when triggered
Thomas Lamprecht [Mon, 17 Jan 2022 10:30:46 +0000 (11:30 +0100)]
d/postinst: fix restarting LRM/CRM when triggered

We wrongly dropped the semi-manual postinst in favor of a fully
auto-generated one, but we always need to generate the trigger
actions ourself - cannot work otherwise.

Fix 3166752 ("postinst: use auto generated postinst")
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/lintian: update repeated-trigger override
Thomas Lamprecht [Mon, 17 Jan 2022 10:30:08 +0000 (11:30 +0100)]
d/lintian: update repeated-trigger override

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agolrm: fix log call on wrong module
Thomas Lamprecht [Thu, 7 Oct 2021 13:19:30 +0000 (15:19 +0200)]
lrm: fix log call on wrong module

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 3.3-1
Thomas Lamprecht [Fri, 2 Jul 2021 18:03:36 +0000 (20:03 +0200)]
bump version to 3.3-1

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agorecovery: allow disabling a in-recovery service
Thomas Lamprecht [Fri, 2 Jul 2021 17:51:31 +0000 (19:51 +0200)]
recovery: allow disabling a in-recovery service

Mostly for convenience for the admin, to avoid the need for removing
it completely, which is always frowned uppon by most users.

Follows the same logic and safety criteria as the transition to
`stopped` on getting into the `disabled` state in the
`next_state_error`.

As we previously had a rather immediate transition from recovery ->
error (not anymore) this is actually restoring a previous feature and
does not adds new implications or the like.

Still, add a test which also covers that the recovery state does not
allows things like stop or migrate to happen.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agotests: cover request-state changes and crm-cmds for in-recovery services
Thomas Lamprecht [Fri, 2 Jul 2021 17:31:42 +0000 (19:31 +0200)]
tests: cover request-state changes and crm-cmds for in-recovery services

Add a test which covers that the recovery state does not allows
things like stop or migrate to happen.

Also add one for disabling at the end, this is currently blocked too
but will change in the next patch, as it can be a safe way out for
the admin to reset the service without removing it.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agorecompute_online_node_usage: show state on internal error
Thomas Lamprecht [Fri, 2 Jul 2021 17:18:22 +0000 (19:18 +0200)]
recompute_online_node_usage: show state on internal error

makes debugging easier, also throw in some code cleanup

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agofix #3415: never switch in error state on recovery, try harder
Thomas Lamprecht [Fri, 2 Jul 2021 15:32:42 +0000 (17:32 +0200)]
fix #3415: never switch in error state on recovery, try harder

With the new 'recovery' state introduced a commit previously we get a
clean transition, and thus actual difference, from to-be-fenced and
fenced.

Use that to avoid going into the error state when we did not find any
possible new node we could recover the service too.
That can happen if the user uses the HA manager for local services,
which is an OK use-case as long as the service is restricted to a
group with only that node. But previous to that we could never
recover such services if their node failed, as they got always put
into the "error" dummy/final state.
But that's just artificially limiting ourself to get a false sense of
safety.

Nobody, touches the services while it's in the recovery state, no LRM
not anything else (as any normal API call gets just routed to the HA
stack anyway) so there's just no chance that we get a bad
double-start of the same services, with resource access collisions
and all the bad stuff that could happen (and note, this will in
practice only matter for restricted services, which are normally only
using local resources, so here it wouldn't even matter if it wasn't
safe already - but it is, double time!).

So, the usual transition guarantees still hold:
* only the current master does transitions
* there needs to be a OK quorate partition to have a master

And, for getting into recovery the following holds:
* the old node's lock was acquired by the master, which means it was
  (self-)fenced -> resource not running

So as "recovery" is a no-op state we got only into once the nodes was
fenced we can continue recovery, i.e., try to find a new node for t
the failed services.

Tests:
* adapt the exist recovery test output to match the endless retry for
  finding a new node (vs. the previous "go into error immediately"
* add a test where the node comes up eventually, so that we cover
  also the recovery to the same node it was on, previous to a failure
* add a test with a non-empty start-state, the restricted failed node
  is online again. This ensure that the service won't get started
  until the HA manager actively recovered it, even if it's staying on
  that node.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agogitignore: add test status output directory's content to ignored files
Thomas Lamprecht [Fri, 2 Jul 2021 14:12:09 +0000 (16:12 +0200)]
gitignore: add test status output directory's content to ignored files

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agotests: add one for service set to be & stay ignored from the start
Thomas Lamprecht [Thu, 1 Jul 2021 15:26:13 +0000 (17:26 +0200)]
tests: add one for service set to be & stay ignored from the start

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agoLRM: release lock and close watchdog if no service configured for >10min
Thomas Lamprecht [Thu, 1 Jul 2021 13:55:43 +0000 (15:55 +0200)]
LRM: release lock and close watchdog if no service configured for >10min

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agoLRM: factor out closing watchdog local helper
Thomas Lamprecht [Thu, 1 Jul 2021 13:56:37 +0000 (15:56 +0200)]
LRM: factor out closing watchdog local helper

It's not much but repeated a few times, and as a next commit will add
another such time let's just refactor it to a local private helper
with a very explicit name and comment about what implications calling
it has.

Take the chance and add some more safety comments too.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agomanager: make recovery actual state in FSM
Thomas Lamprecht [Wed, 30 Jun 2021 10:43:08 +0000 (12:43 +0200)]
manager: make recovery actual state in FSM

This basically makes recovery just an active state transition, as can
be seen from the regression tests - no other semantic change is
caused.

For the admin this is much better to grasp than services still marked
as "fence" when the failed node is already fenced or even already up
again.

Code-wise it makes sense too, to make the recovery part not so hidden
anymore, but show it was it is: an actual part of the FSM

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agomanager: indentation/code-style cleanups
Thomas Lamprecht [Wed, 30 Jun 2021 08:39:24 +0000 (10:39 +0200)]
manager: indentation/code-style cleanups

we now allow for a longer text-width in general and adapt some lines
for that

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agoha-tester: allow one to supress the actual test output
Thomas Lamprecht [Thu, 1 Jul 2021 13:39:15 +0000 (15:39 +0200)]
ha-tester: allow one to supress the actual test output

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agoha-tester: report summary count of run/passed tests and list failed ones
Thomas Lamprecht [Thu, 1 Jul 2021 12:53:16 +0000 (14:53 +0200)]
ha-tester: report summary count of run/passed tests and list failed ones

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agoha-tester: allow to continue harness on test failure
Thomas Lamprecht [Thu, 1 Jul 2021 12:51:45 +0000 (14:51 +0200)]
ha-tester: allow to continue harness on test failure

To see if just a bit or many tests are broken it is useful to
sometimes run all, and not just exit after first failure.

Allow this as opt-in feature.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agosim: hardware: update & reformat comment for available commands
Thomas Lamprecht [Thu, 1 Jul 2021 13:59:18 +0000 (15:59 +0200)]
sim: hardware: update & reformat comment for available commands

The service addition and deletion, and also the artificial delay
(useful to force continuation of the HW) commands where missing
completely.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobuildsys: change upload/repo dist to bullseye
Thomas Lamprecht [Mon, 24 May 2021 09:40:39 +0000 (11:40 +0200)]
buildsys: change upload/repo dist to bullseye

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 3.2-2
Thomas Lamprecht [Mon, 24 May 2021 09:38:46 +0000 (11:38 +0200)]
bump version to 3.2-2

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/rules: update to systemd dh changes
Thomas Lamprecht [Mon, 24 May 2021 09:36:57 +0000 (11:36 +0200)]
d/rules: update to systemd dh changes

both, `override_dh_systemd_enable` and `override_dh_systemd_start`
are ignored with current compat level 12, and will become an error in
level >= 13, so drop them and use `override_dh_installsystemd` for
both of the previous uses.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agobump version to 3.2-1
Thomas Lamprecht [Wed, 12 May 2021 18:56:03 +0000 (20:56 +0200)]
bump version to 3.2-1

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2 years agod/control: bump debhelper compat level to 12
Thomas Lamprecht [Wed, 12 May 2021 18:54:22 +0000 (20:54 +0200)]
d/control: bump debhelper compat level to 12

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agobump version to 3.1-1
Thomas Lamprecht [Mon, 31 Aug 2020 08:52:17 +0000 (10:52 +0200)]
bump version to 3.1-1

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
3 years agovm resource: add "with-local-disks" for replicated migrate
Thomas Lamprecht [Thu, 14 May 2020 08:15:59 +0000 (10:15 +0200)]
vm resource: add "with-local-disks" for replicated migrate

We do not need passing a target storage as the identity mapping
prefers replicated storage for a replicated disks already, and other
cases do not make sense anyway as they wouldn't work for HA
recovery..

We probably want to check the "really only replicated OK migrations"
in the respective API code paths for the "ha" RPC environment case,
though.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agobump version to 3.0-9
Thomas Lamprecht [Thu, 12 Mar 2020 12:18:52 +0000 (13:18 +0100)]
bump version to 3.0-9

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agofactor out service configured/delete helpers
Thomas Lamprecht [Thu, 12 Mar 2020 11:50:04 +0000 (12:50 +0100)]
factor out service configured/delete helpers

those differ from the "managed" service in that that they do not
check the state at all, the just check if, or respectively delete, a
SID is in the config or not.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoconfig parse_sid: improve error message, not only used on 'add'
Thomas Lamprecht [Thu, 12 Mar 2020 11:48:03 +0000 (12:48 +0100)]
config parse_sid: improve error message, not only used on 'add'

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agonodestate: move to modern coderef call syntax
Thomas Lamprecht [Sat, 15 Feb 2020 12:17:12 +0000 (13:17 +0100)]
nodestate: move to modern coderef call syntax

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agofix service name for pve-ha-crm
Oguz Bektas [Tue, 11 Feb 2020 08:26:25 +0000 (09:26 +0100)]
fix service name for pve-ha-crm

"PVE Cluster Resource Manager Daemon" should be "PVE Cluster HA Resource
Manager Daemon"

[0]: https://forum.proxmox.com/threads/typo-omission.65107/

Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
4 years agogrammar fix: s/does not exists/does not exist/g
Thomas Lamprecht [Fri, 13 Dec 2019 11:08:30 +0000 (12:08 +0100)]
grammar fix: s/does not exists/does not exist/g

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agotests: add a start on a maintained node
Thomas Lamprecht [Mon, 2 Dec 2019 09:56:18 +0000 (10:56 +0100)]
tests: add a start on a maintained node

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agotest shutdown policy: add stopped service to ensure maintained node is not fenced
Thomas Lamprecht [Mon, 2 Dec 2019 09:37:18 +0000 (10:37 +0100)]
test shutdown policy: add stopped service to ensure maintained node is not fenced

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agobump version to 3.0-8
Thomas Lamprecht [Mon, 2 Dec 2019 09:33:10 +0000 (10:33 +0100)]
bump version to 3.0-8

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoFix check for maintenance mode
Fabian Ebner [Mon, 2 Dec 2019 08:45:32 +0000 (09:45 +0100)]
Fix check for maintenance mode

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
4 years agobump version to 3.0-7
Thomas Lamprecht [Sat, 30 Nov 2019 18:47:48 +0000 (19:47 +0100)]
bump version to 3.0-7

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agoapi/status: extra handling of maintenance mode
Thomas Lamprecht [Sat, 30 Nov 2019 18:46:47 +0000 (19:46 +0100)]
api/status: extra handling of maintenance mode

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agodo not mark maintenaned nodes as unkown
Thomas Lamprecht [Sat, 30 Nov 2019 18:31:50 +0000 (19:31 +0100)]
do not mark maintenaned nodes as unkown

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agobump LRM stop_wait_time to an hour
Thomas Lamprecht [Fri, 29 Nov 2019 13:15:11 +0000 (14:15 +0100)]
bump LRM stop_wait_time to an hour

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agobump version to 3.0-6
Thomas Lamprecht [Tue, 26 Nov 2019 17:03:32 +0000 (18:03 +0100)]
bump version to 3.0-6

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
4 years agolrm.service: add after ordering for SSH and pveproxy
Thomas Lamprecht [Mon, 25 Nov 2019 16:35:43 +0000 (17:35 +0100)]
lrm.service: add after ordering for SSH and pveproxy

To avoid early disconnect during shutdown ensure we order After them,
for shutdown the ordering is reversed and so we're stopped before
those two - this allows to checkout the node stats and do SSH stuff
if something fails.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>