Commit 149a35b1 authored by Klaus Aehlig's avatar Klaus Aehlig

Merge branch 'stable-2.13' into stable-2.14

* stable-2.13
  Increase waiting time to avoid races
  Avoid watcher interaction in TestFilterRateLimit
  Avoid races in TestAdHocReasonRateLimit
  Avoid races in TestFilterRateLimit

* stable-2.12
  Add a unit test for the Gluster storage type
  Add missing Gluster storage verification checks
  Add Gluster type to the node storage reporting set
  Introduce the Gluster storage type
  Make xend-config.sxp optional
  Revision bump to 2.12.4
  Update NEWS for 2.12.4
  Ignore *.dyn* files generated by GHC 7.8
  Replace HFLAGS_NOPROF with HFLAGS_DYNAMIC in the Makefile

* stable-2.11
  (no changes)

* stable-2.10
  Check for gnt-cluster before running gnt-cluster upgrade

Conflicts:
	Makefile.am: take stable-2.14 version
Signed-off-by: default avatarKlaus Aehlig <aehlig@google.com>
Reviewed-by: default avatarPetr Pudlak <pudlak@google.com>
parents 32230f06 39c54b84
......@@ -11,9 +11,11 @@
*.o
*.hpc_o
*.prof_o
*.dyn_o
*.hi
*.hpc_hi
*.prof_hi
*.dyn_hi
*.hp
*.tix
*.prof
......
......@@ -143,11 +143,27 @@ New dependencies
- The formerly optional regex-pcre is now an unconditional dependency because
the new job filter rules have regular expressions as a core feature.
Version 2.12.4
--------------
*(Released Tue, 12 May 2015)*
- Fixed Issue #1082: RAPI is unresponsive after master-failover
- Fixed Issue #1083: Cluster verify reports existing instance disks on
non-default VGs as missing
- Fixed a possible file descriptor leak when forking jobs
- Fixed missing private parameters in the environment for OS scripts
- Fixed a performance regression when handling configuration
(only upgrade it if it changes)
- Adapt for compilation with GHC7.8 (compiles with warnings;
cherrypicked from 2.14)
Known issues
~~~~~~~~~~~~
- GHC 7.8 introduced some incompatible changes, so currently Ganeti
2.12. doesn't compile on GHC 7.8
Pending since 2.12.2:
- Under certain conditions instance doesn't get unpaused after live
migration (issue #1050)
- GlusterFS support breaks at upgrade to 2.12 - switches back to
......
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
# On reboot, continue a Ganeti upgrade, if one was in progress
@reboot root @SBINDIR@/gnt-cluster upgrade --resume
@reboot root [ -x @SBINDIR@/gnt-cluster ] && @SBINDIR@/gnt-cluster upgrade --resume
# Restart failed instances (every 5 minutes)
*/5 * * * * root [ -x @SBINDIR@/ganeti-watcher ] && @SBINDIR@/ganeti-watcher
......
......@@ -1766,7 +1766,7 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors):
if n_drained:
feedback_fn(" - NOTICE: %d drained node(s) found." % n_drained)
def Exec(self, feedback_fn):
def Exec(self, feedback_fn): # pylint: disable=R0915
"""Verify integrity of the node group, performing various test on nodes.
"""
......
......@@ -472,6 +472,7 @@ class XenHypervisor(hv_base.BaseHypervisor):
VIF_BRIDGE_SCRIPT,
]
ANCILLARY_FILES_OPT = [
XEND_CONFIG_FILE,
XL_CONFIG_FILE,
]
......
......@@ -277,6 +277,8 @@ def TestFilterAcceptPause():
and that the ACCEPT filter immediately allows starting.
"""
AssertCommand(["gnt-cluster", "watcher", "pause", "600"])
# Add a filter chain that pauses all new jobs apart from those with a
# specific reason.
# When the pausing filter is deleted, paused jobs must be continued.
......@@ -310,7 +312,7 @@ def TestFilterAcceptPause():
"0.01",
]))
time.sleep(0.5) # give some time to get queued
time.sleep(5) # give some time to get queued
AssertStatusRetry(jid1, "queued") # job should be paused
AssertStatusRetry(jid2, "success") # job should not be paused
......@@ -320,8 +322,11 @@ def TestFilterAcceptPause():
AssertCommand(["gnt-filter", "delete", uuid2])
# Now the paused job should run through.
time.sleep(5)
AssertStatusRetry(jid1, "success")
AssertCommand(["gnt-cluster", "watcher", "continue"])
def TestFilterRateLimit():
"""Tests that the RATE_LIMIT filter does reject new jobs when all
......@@ -332,6 +337,7 @@ def TestFilterRateLimit():
# (simply set it to the default).
AssertCommand(["gnt-cluster", "modify", "--max-running-jobs=20"])
AssertCommand(["gnt-cluster", "modify", "--max-tracked-jobs=25"])
AssertCommand(["gnt-cluster", "watcher", "pause", "600"])
# Add a filter that rejects all new jobs.
uuid = stdout_of([
......@@ -342,16 +348,16 @@ def TestFilterRateLimit():
# Now only the first 2 jobs must be scheduled.
jid1 = int(stdout_of([
"gnt-debug", "delay", "--print-jobid", "--submit", "20"
"gnt-debug", "delay", "--print-jobid", "--submit", "200"
]))
jid2 = int(stdout_of([
"gnt-debug", "delay", "--print-jobid", "--submit", "20"
"gnt-debug", "delay", "--print-jobid", "--submit", "200"
]))
jid3 = int(stdout_of([
"gnt-debug", "delay", "--print-jobid", "--submit", "20"
"gnt-debug", "delay", "--print-jobid", "--submit", "200"
]))
time.sleep(0.1) # give the scheduler some time to notice
time.sleep(5) # give the scheduler some time to notice
AssertIn(GetJobStatus(jid1), ["running", "waiting"],
msg="Job should not be rate-limited")
......@@ -362,6 +368,7 @@ def TestFilterRateLimit():
# Clean up.
AssertCommand(["gnt-filter", "delete", uuid])
KillWaitJobs([jid1, jid2, jid3])
AssertCommand(["gnt-cluster", "watcher", "continue"])
def TestAdHocReasonRateLimit():
......@@ -376,18 +383,18 @@ def TestAdHocReasonRateLimit():
# Only the first 2 jobs must be scheduled.
jid1 = int(stdout_of([
"gnt-debug", "delay", "--print-jobid", "--submit",
"--reason=rate-limit:2:hello", "20",
"--reason=rate-limit:2:hello", "200",
]))
jid2 = int(stdout_of([
"gnt-debug", "delay", "--print-jobid", "--submit",
"--reason=rate-limit:2:hello", "20",
"--reason=rate-limit:2:hello", "200",
]))
jid3 = int(stdout_of([
"gnt-debug", "delay", "--print-jobid", "--submit",
"--reason=rate-limit:2:hello", "20",
"--reason=rate-limit:2:hello", "200",
]))
time.sleep(0.1) # give the scheduler some time to notice
time.sleep(5) # give the scheduler some time to notice
AssertIn(GetJobStatus(jid1), ["running", "waiting"],
msg="Job should not be rate-limited")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment