Revision 56aa9fd5
b/daemons/ganeti-noded | ||
---|---|---|
472 | 472 |
""" |
473 | 473 |
return backend.NodeVolumes() |
474 | 474 |
|
475 |
@staticmethod |
|
476 |
def perspective_node_demote_from_mc(params): |
|
477 |
"""Demote a node from the master candidate role. |
|
478 |
|
|
479 |
""" |
|
480 |
return backend.DemoteFromMC() |
|
481 |
|
|
482 |
|
|
475 | 483 |
# cluster -------------------------- |
476 | 484 |
|
477 | 485 |
@staticmethod |
b/lib/backend.py | ||
---|---|---|
2051 | 2051 |
return (False, str(err)) |
2052 | 2052 |
|
2053 | 2053 |
|
2054 |
def DemoteFromMC(): |
|
2055 |
"""Demotes the current node from master candidate role. |
|
2056 |
|
|
2057 |
""" |
|
2058 |
# try to ensure we're not the master by mistake |
|
2059 |
master, myself = ssconf.GetMasterAndMyself() |
|
2060 |
if master == myself: |
|
2061 |
return (False, "ssconf status shows I'm the master node, will not demote") |
|
2062 |
pid_file = utils.DaemonPidFileName(constants.MASTERD_PID) |
|
2063 |
if utils.IsProcessAlive(utils.ReadPidFile(pid_file)): |
|
2064 |
return (False, "The master daemon is running, will not demote") |
|
2065 |
try: |
|
2066 |
utils.CreateBackup(constants.CLUSTER_CONF_FILE) |
|
2067 |
except EnvironmentError, err: |
|
2068 |
if err.errno != errno.ENOENT: |
|
2069 |
return (False, "Error while backing up cluster file: %s" % str(err)) |
|
2070 |
utils.RemoveFile(constants.CLUSTER_CONF_FILE) |
|
2071 |
return (True, "Done") |
|
2072 |
|
|
2073 |
|
|
2054 | 2074 |
class HooksRunner(object): |
2055 | 2075 |
"""Hook runner. |
2056 | 2076 |
|
b/lib/cmdlib.py | ||
---|---|---|
2157 | 2157 |
if self.op.master_candidate is not None: |
2158 | 2158 |
node.master_candidate = self.op.master_candidate |
2159 | 2159 |
result.append(("master_candidate", str(self.op.master_candidate))) |
2160 |
if self.op.master_candidate == False: |
|
2161 |
rrc = self.rpc.call_node_demote_from_mc(node.name) |
|
2162 |
if (rrc.failed or not isinstance(rrc.data, (tuple, list)) |
|
2163 |
or len(rrc.data) != 2): |
|
2164 |
self.LogWarning("Node rpc error: %s" % rrc.error) |
|
2165 |
elif not rrc.data[0]: |
|
2166 |
self.LogWarning("Node failed to demote itself: %s" % rrc.data[1]) |
|
2160 | 2167 |
|
2161 | 2168 |
# this will trigger configuration file update, if needed |
2162 | 2169 |
self.cfg.Update(node) |
b/lib/rpc.py | ||
---|---|---|
828 | 828 |
""" |
829 | 829 |
return self._MultiNodeCall(node_list, "node_volumes", []) |
830 | 830 |
|
831 |
def call_node_demote_from_mc(self, node): |
|
832 |
"""Demote a node from the master candidate role. |
|
833 |
|
|
834 |
This is a single-node call. |
|
835 |
|
|
836 |
""" |
|
837 |
return self._SingleNodeCall(node, "node_demote_from_mc", []) |
|
838 |
|
|
831 | 839 |
def call_test_delay(self, node_list, duration): |
832 | 840 |
"""Sleep for a fixed time on given node(s). |
833 | 841 |
|
Also available in: Unified diff