Skip to content

Commit

Permalink
Merge pull request #1919 from kgaillot/backports
Browse files Browse the repository at this point in the history
Release 1.1.22-rc1
  • Loading branch information
kgaillot authored Oct 23, 2019
2 parents 1fff649 + 2a7435f commit cdd11c1
Show file tree
Hide file tree
Showing 19 changed files with 322 additions and 188 deletions.
38 changes: 38 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,41 @@
* Tue Oct 22 2019 Ken Gaillot <kgaillot@redhat.com> Pacemaker-1.1.22
- Changesets: 198
- Diff: 95 files changed, 3047 insertions(+), 1245 deletions(-)

- Features added since Pacemaker-1.1.21
+ crmd: new 'fence-reaction' cluster option specifies whether local node
should 'stop' or 'panic' if notified of own fencing
+ Pacemaker Remote: allow file for environment variables when used in bundle
+ Pacemaker Remote: allow configurable listen address and TLS priorities
+ tools: crm_simulate --repeat option to repeat profiling tests
+ tools: new pcmk_simtimes tool to compare crm_simulate profiling output

- Changes since Pacemaker-1.1.21
+ fencing: do not block concurrent fencing actions on a device
(regression since 1.1.21)
+ crmd: set timeout on scheduler responses to avoid infinite wait
+ crmd: confirm cancel of failed monitors, to avoid transition timeout
+ lrmd: let controller cancel monitors, to avoid transition timeout
+ lrmd: return error for stonith probes if stonith connection was lost
+ fencing: ensure concurrent fencing commands always get triggered to execute
+ fencing: fail pending actions and re-sync history after crash and restart
+ fencing: don't let command with long delay block other pending commands
+ fencing: allow functioning even if CIB updates arrive unceasingly
+ pengine: calculate secure digests for unfencing, for replaying saved CIBs
+ pengine: properly detect dangling migrations, to avoid restart loop
+ pengine: avoid delay in recovery of failed remote connections
+ pengine: avoid scheduling actions on remote node that is shutting down
+ pengine: wait for probe actions to complete to prevent unnecessary
restart/re-promote of dependent resources
+ libcrmcommon: avoid possible use-of-NULL when applying XML diffs
+ libcrmcommon: correctly apply XML diffs with multiple move/create changes
+ libcrmcommon: return error when applying XML diffs containing unknown operations
+ tools: fail if tar is not available when running crm_report
+ tools: correct crm_report argument parsing
+ tools: crm_report: don't ignore log if unrelated file is too large
+ agents: calculate #health_disk correctly in SysInfo
+ agents: handle run-as-user properly in ClusterMon

* Thu Jun 6 2019 Ken Gaillot <kgaillot@redhat.com> Pacemaker-1.1.21
- Changesets: 64
- Diff: 39 files changed, 1985 insertions(+), 843 deletions(-)
Expand Down
2 changes: 1 addition & 1 deletion cts/CTStests.py
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,7 @@ def errorstoignore(self):
self.templates["Pat:Fencing_start"] % ".*",
self.templates["Pat:Fencing_ok"] % ".*",
r"error.*: Resource .*stonith::.* is active on 2 nodes attempting recovery",
r"error.*: Operation reboot of .*by .* for stonith_admin.*: Timer expired",
r"error.*: Operation 'reboot' targeting .* on .* for stonith_admin.*: Timer expired",
]

def is_applicable(self):
Expand Down
4 changes: 2 additions & 2 deletions cts/patterns.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ def __init__(self, name):
"Pat:They_dead" : "node %s.*: is dead",
"Pat:TransitionComplete" : "Transition status: Complete: complete",

"Pat:Fencing_start" : r"(Initiating remote operation|Requesting peer fencing ).* (for|of) %s",
"Pat:Fencing_ok" : r"stonith.*:\s*Operation .* of %s by .* for .*@.*: OK",
"Pat:Fencing_start" : r"Requesting peer fencing .* targeting %s",
"Pat:Fencing_ok" : r"stonith.*:\s*Operation .* targeting %s on .* for .*@.*: OK",
"Pat:Fencing_recover" : r"pengine.*: Recover %s",
"Pat:Fencing_active" : r"pengine.*: Resource %s is active on .* nodes",
"Pat:Fencing_probe" : r"crmd.*: Result of probe operation for %s on .*: Error",
Expand Down
82 changes: 41 additions & 41 deletions fencing/regression.py.in
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# Pacemaker targets compatibility with Python 2.6+ and 3.2+
from __future__ import print_function, unicode_literals, absolute_import, division

__copyright__ = "Copyright (C) 2012-2016 Andrew Beekhof <andrew@beekhof.net>"
__copyright__ = "Copyright 2012-2019 the Pacemaker project contributors"
__license__ = "GNU General Public License version 2 or later (GPLv2+) WITHOUT ANY WARRANTY"

import io
Expand Down Expand Up @@ -485,8 +485,8 @@ class Tests(object):
### one merger will happen
test.add_stonith_log_pattern("Merging stonith action 'off' targeting node3 originating from client")
### the pattern below signifies that both the original and duplicate operation completed
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")

### Test that multiple mergers occur
test = self.new_test("cpg_custom_merge_multiple",
Expand All @@ -506,11 +506,11 @@ class Tests(object):
test.add_stonith_log_pattern("Merging stonith action 'off' targeting node3 originating from client")
test.add_stonith_log_pattern("Merging stonith action 'off' targeting node3 originating from client")
### the pattern below signifies that both the original and duplicate operation completed
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")

### Test that multiple mergers occur with topologies used
test = self.new_test("cpg_custom_merge_with_topology",
Expand All @@ -533,11 +533,11 @@ class Tests(object):
test.add_stonith_log_pattern("Merging stonith action 'off' targeting node3 originating from client")
test.add_stonith_log_pattern("Merging stonith action 'off' targeting node3 originating from client")
### the pattern below signifies that both the original and duplicate operation completed
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation off of node3 by")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")
test.add_stonith_log_pattern("Operation 'off' targeting node3 on")

def build_fence_no_merge_tests(self):
""" Register tests to verify when fence operations should not be merged """
Expand Down Expand Up @@ -1130,16 +1130,16 @@ class Tests(object):
"""-o "pcmk_off_timeout=2" -o "pcmk_reboot_timeout=20" """)
test.add_cmd("stonith_admin", "-r node_fake -i 1 -v true1 -v true2")
test.add_cmd("stonith_admin", "-B node_fake -t 5")
test.add_stonith_log_pattern("Remapping multiple-device reboot of node_fake")
test.add_stonith_log_pattern("Remapping multiple-device reboot targeting node_fake")
# timeout should be sum of off timeouts (1+2=3), not reboot timeouts (10+20=30)
test.add_stonith_log_pattern("Total timeout set to 3 for peer's fencing of node_fake")
test.add_stonith_log_pattern("perform op 'node_fake off' with 'true1'")
test.add_stonith_log_pattern("perform op 'node_fake off' with 'true2'")
test.add_stonith_log_pattern("Remapped off of node_fake complete, remapping to on")
test.add_stonith_log_pattern("Total timeout set to 3 for peer's fencing targeting node_fake")
test.add_stonith_log_pattern("perform 'off' action targeting node_fake using 'true1'")
test.add_stonith_log_pattern("perform 'off' action targeting node_fake using 'true2'")
test.add_stonith_log_pattern("Remapped 'off' targeting node_fake complete, remapping to 'on'")
# fence_dummy sets "on" as an on_target action
test.add_stonith_log_pattern("Ignoring true1 'on' failure (no capable peers) for node_fake")
test.add_stonith_log_pattern("Ignoring true2 'on' failure (no capable peers) for node_fake")
test.add_stonith_log_pattern("Undoing remap of reboot of node_fake")
test.add_stonith_log_pattern("Ignoring true1 'on' failure (no capable peers) targeting node_fake")
test.add_stonith_log_pattern("Ignoring true2 'on' failure (no capable peers) targeting node_fake")
test.add_stonith_log_pattern("Undoing remap of reboot targeting node_fake")

test = self.new_test("cpg_remap_automatic",
"Verify remapped topology reboot skips automatic 'on'", 1)
Expand All @@ -1151,12 +1151,12 @@ class Tests(object):
"""-o "mode=pass" -o "pcmk_host_list=node_fake" """)
test.add_cmd("stonith_admin", "-r node_fake -i 1 -v true1 -v true2")
test.add_cmd("stonith_admin", "-B node_fake -t 5")
test.add_stonith_log_pattern("Remapping multiple-device reboot of node_fake")
test.add_stonith_log_pattern("perform op 'node_fake off' with 'true1'")
test.add_stonith_log_pattern("perform op 'node_fake off' with 'true2'")
test.add_stonith_log_pattern("Remapped off of node_fake complete, remapping to on")
test.add_stonith_log_pattern("Undoing remap of reboot of node_fake")
test.add_stonith_neg_log_pattern("perform op 'node_fake on' with")
test.add_stonith_log_pattern("Remapping multiple-device reboot targeting node_fake")
test.add_stonith_log_pattern("perform 'off' action targeting node_fake using 'true1'")
test.add_stonith_log_pattern("perform 'off' action targeting node_fake using 'true2'")
test.add_stonith_log_pattern("Remapped 'off' targeting node_fake complete, remapping to 'on'")
test.add_stonith_log_pattern("Undoing remap of reboot targeting node_fake")
test.add_stonith_neg_log_pattern("perform 'on' action targeting node_fake using")
test.add_stonith_neg_log_pattern("'on' failure")

test = self.new_test("cpg_remap_complex_1",
Expand All @@ -1168,14 +1168,14 @@ class Tests(object):
test.add_cmd("stonith_admin", "-r node_fake -i 1 -v false1")
test.add_cmd("stonith_admin", "-r node_fake -i 2 -v true1 -v true2")
test.add_cmd("stonith_admin", "-B node_fake -t 5")
test.add_stonith_log_pattern("perform op 'node_fake reboot' with 'false1'")
test.add_stonith_log_pattern("Remapping multiple-device reboot of node_fake")
test.add_stonith_log_pattern("perform op 'node_fake off' with 'true1'")
test.add_stonith_log_pattern("perform op 'node_fake off' with 'true2'")
test.add_stonith_log_pattern("Remapped off of node_fake complete, remapping to on")
test.add_stonith_log_pattern("Ignoring true1 'on' failure (no capable peers) for node_fake")
test.add_stonith_log_pattern("Ignoring true2 'on' failure (no capable peers) for node_fake")
test.add_stonith_log_pattern("Undoing remap of reboot of node_fake")
test.add_stonith_log_pattern("perform 'reboot' action targeting node_fake using 'false1'")
test.add_stonith_log_pattern("Remapping multiple-device reboot targeting node_fake")
test.add_stonith_log_pattern("perform 'off' action targeting node_fake using 'true1'")
test.add_stonith_log_pattern("perform 'off' action targeting node_fake using 'true2'")
test.add_stonith_log_pattern("Remapped 'off' targeting node_fake complete, remapping to 'on'")
test.add_stonith_log_pattern("Ignoring true1 'on' failure (no capable peers) targeting node_fake")
test.add_stonith_log_pattern("Ignoring true2 'on' failure (no capable peers) targeting node_fake")
test.add_stonith_log_pattern("Undoing remap of reboot targeting node_fake")

test = self.new_test("cpg_remap_complex_2",
"Verify remapped topology reboot failure in second level proceeds to third level",
Expand All @@ -1189,13 +1189,13 @@ class Tests(object):
test.add_cmd("stonith_admin", "-r node_fake -i 2 -v true1 -v false2 -v true3")
test.add_cmd("stonith_admin", "-r node_fake -i 3 -v true2")
test.add_cmd("stonith_admin", "-B node_fake -t 5")
test.add_stonith_log_pattern("perform op 'node_fake reboot' with 'false1'")
test.add_stonith_log_pattern("Remapping multiple-device reboot of node_fake")
test.add_stonith_log_pattern("perform op 'node_fake off' with 'true1'")
test.add_stonith_log_pattern("perform op 'node_fake off' with 'false2'")
test.add_stonith_log_pattern("perform 'reboot' action targeting node_fake using 'false1'")
test.add_stonith_log_pattern("Remapping multiple-device reboot targeting node_fake")
test.add_stonith_log_pattern("perform 'off' action targeting node_fake using 'true1'")
test.add_stonith_log_pattern("perform 'off' action targeting node_fake using 'false2'")
test.add_stonith_log_pattern("Attempted to execute agent fence_dummy (off) the maximum number of times")
test.add_stonith_log_pattern("Undoing remap of reboot of node_fake")
test.add_stonith_log_pattern("perform op 'node_fake reboot' with 'true2'")
test.add_stonith_log_pattern("Undoing remap of reboot targeting node_fake")
test.add_stonith_log_pattern("perform 'reboot' action targeting node_fake using 'true2'")
test.add_stonith_neg_log_pattern("node_fake with true3")

def setup_environment(self, use_corosync):
Expand Down
Loading

0 comments on commit cdd11c1

Please sign in to comment.