|
@@ -164,7 +164,7 @@ class corosync_needle(ClusterManager):
|
|
|
for c in self.applied_config:
|
|
for c in self.applied_config:
|
|
|
if 'bindnetaddr' in c:
|
|
if 'bindnetaddr' in c:
|
|
|
continue
|
|
continue
|
|
|
- elif not self.config.original.has_key(c):
|
|
|
|
|
|
|
+ elif c not in self.config.original:
|
|
|
# new config option (non default)
|
|
# new config option (non default)
|
|
|
pass
|
|
pass
|
|
|
elif self.applied_config[c] is not self.config.original[c]:
|
|
elif self.applied_config[c] is not self.config.original[c]:
|
|
@@ -207,13 +207,13 @@ class corosync_needle(ClusterManager):
|
|
|
self.install_all_config()
|
|
self.install_all_config()
|
|
|
|
|
|
|
|
def key_for_node(self, node):
|
|
def key_for_node(self, node):
|
|
|
- if not self.node_to_ip.has_key(node):
|
|
|
|
|
|
|
+ if node not in self.node_to_ip:
|
|
|
self.node_to_ip[node] = socket.gethostbyname (node)
|
|
self.node_to_ip[node] = socket.gethostbyname (node)
|
|
|
return self.node_to_ip[node]
|
|
return self.node_to_ip[node]
|
|
|
|
|
|
|
|
def StartaCM(self, node, verbose=False):
|
|
def StartaCM(self, node, verbose=False):
|
|
|
|
|
|
|
|
- if not self.ShouldBeStatus.has_key(node):
|
|
|
|
|
|
|
+ if node not in self.ShouldBeStatus:
|
|
|
self.ShouldBeStatus[node] = "down"
|
|
self.ShouldBeStatus[node] = "down"
|
|
|
|
|
|
|
|
if self.ShouldBeStatus[node] != "down":
|
|
if self.ShouldBeStatus[node] != "down":
|
|
@@ -222,19 +222,19 @@ class corosync_needle(ClusterManager):
|
|
|
self.debug('starting corosync on : ' + node)
|
|
self.debug('starting corosync on : ' + node)
|
|
|
ret = ClusterManager.StartaCM(self, node)
|
|
ret = ClusterManager.StartaCM(self, node)
|
|
|
if self.start_cpg:
|
|
if self.start_cpg:
|
|
|
- if self.cpg_agent.has_key(node):
|
|
|
|
|
|
|
+ if node in self.cpg_agent:
|
|
|
self.cpg_agent[node].restart()
|
|
self.cpg_agent[node].restart()
|
|
|
else:
|
|
else:
|
|
|
self.cpg_agent[node] = CpgTestAgent(node, self.Env)
|
|
self.cpg_agent[node] = CpgTestAgent(node, self.Env)
|
|
|
self.cpg_agent[node].start()
|
|
self.cpg_agent[node].start()
|
|
|
|
|
|
|
|
- if self.sam_agent.has_key(node):
|
|
|
|
|
|
|
+ if node in self.sam_agent:
|
|
|
self.sam_agent[node].restart()
|
|
self.sam_agent[node].restart()
|
|
|
|
|
|
|
|
# votequorum agent started as needed.
|
|
# votequorum agent started as needed.
|
|
|
- if self.applied_config.has_key('quorum/provider'):
|
|
|
|
|
|
|
+ if 'quorum/provider' in self.applied_config:
|
|
|
if self.applied_config['quorum/provider'] is 'corosync_votequorum':
|
|
if self.applied_config['quorum/provider'] is 'corosync_votequorum':
|
|
|
- if self.votequorum_agent.has_key(node):
|
|
|
|
|
|
|
+ if node in self.votequorum_agent:
|
|
|
self.votequorum_agent[node].restart()
|
|
self.votequorum_agent[node].restart()
|
|
|
else:
|
|
else:
|
|
|
self.votequorum_agent[node] = VoteQuorumTestAgent(node, self.Env)
|
|
self.votequorum_agent[node] = VoteQuorumTestAgent(node, self.Env)
|
|
@@ -247,11 +247,11 @@ class corosync_needle(ClusterManager):
|
|
|
return 1
|
|
return 1
|
|
|
|
|
|
|
|
self.debug('stoping corosync on : ' + node)
|
|
self.debug('stoping corosync on : ' + node)
|
|
|
- if self.cpg_agent.has_key(node):
|
|
|
|
|
|
|
+ if node in self.cpg_agent:
|
|
|
self.cpg_agent[node].stop()
|
|
self.cpg_agent[node].stop()
|
|
|
- if self.sam_agent.has_key(node):
|
|
|
|
|
|
|
+ if node in self.sam_agent:
|
|
|
self.sam_agent[node].stop()
|
|
self.sam_agent[node].stop()
|
|
|
- if self.votequorum_agent.has_key(node):
|
|
|
|
|
|
|
+ if node in self.votequorum_agent:
|
|
|
self.votequorum_agent[node].stop()
|
|
self.votequorum_agent[node].stop()
|
|
|
return ClusterManager.StopaCM(self, node)
|
|
return ClusterManager.StopaCM(self, node)
|
|
|
|
|
|
|
@@ -381,18 +381,18 @@ class TestAgentComponent(ScenarioComponent):
|
|
|
raise RuntimeError ("corosync not up")
|
|
raise RuntimeError ("corosync not up")
|
|
|
|
|
|
|
|
if self.CM.start_cpg:
|
|
if self.CM.start_cpg:
|
|
|
- if self.CM.cpg_agent.has_key(node):
|
|
|
|
|
|
|
+ if node in self.CM.cpg_agent:
|
|
|
self.CM.cpg_agent[node].clean_start()
|
|
self.CM.cpg_agent[node].clean_start()
|
|
|
else:
|
|
else:
|
|
|
self.CM.cpg_agent[node] = CpgTestAgent(node, CM.Env)
|
|
self.CM.cpg_agent[node] = CpgTestAgent(node, CM.Env)
|
|
|
self.CM.cpg_agent[node].start()
|
|
self.CM.cpg_agent[node].start()
|
|
|
- if self.CM.sam_agent.has_key(node):
|
|
|
|
|
|
|
+ if node in self.CM.sam_agent:
|
|
|
self.CM.sam_agent[node].clean_start()
|
|
self.CM.sam_agent[node].clean_start()
|
|
|
else:
|
|
else:
|
|
|
self.CM.sam_agent[node] = SamTestAgent(node, CM.Env)
|
|
self.CM.sam_agent[node] = SamTestAgent(node, CM.Env)
|
|
|
self.CM.sam_agent[node].start()
|
|
self.CM.sam_agent[node].start()
|
|
|
# votequorum agent started as needed.
|
|
# votequorum agent started as needed.
|
|
|
- if self.CM.applied_config.has_key('quorum/provider'):
|
|
|
|
|
|
|
+ if 'quorum/provider' in self.CM.applied_config:
|
|
|
if CM.applied_config['quorum/provider'] is 'corosync_votequorum':
|
|
if CM.applied_config['quorum/provider'] is 'corosync_votequorum':
|
|
|
self.CM.votequorum_agent[node] = VoteQuorumTestAgent(node, CM.Env)
|
|
self.CM.votequorum_agent[node] = VoteQuorumTestAgent(node, CM.Env)
|
|
|
self.CM.votequorum_agent[node].start()
|
|
self.CM.votequorum_agent[node].start()
|
|
@@ -402,10 +402,10 @@ class TestAgentComponent(ScenarioComponent):
|
|
|
'''Tear down (undo) the given ScenarioComponent'''
|
|
'''Tear down (undo) the given ScenarioComponent'''
|
|
|
self.CM = CM
|
|
self.CM = CM
|
|
|
for node in self.Env["nodes"]:
|
|
for node in self.Env["nodes"]:
|
|
|
- if self.CM.cpg_agent.has_key(node):
|
|
|
|
|
|
|
+ if node in self.CM.cpg_agent:
|
|
|
self.CM.cpg_agent[node].stop()
|
|
self.CM.cpg_agent[node].stop()
|
|
|
self.CM.sam_agent[node].stop()
|
|
self.CM.sam_agent[node].stop()
|
|
|
- if self.CM.votequorum_agent.has_key(node):
|
|
|
|
|
|
|
+ if node in self.CM.votequorum_agent:
|
|
|
self.CM.votequorum_agent[node].stop()
|
|
self.CM.votequorum_agent[node].stop()
|
|
|
|
|
|
|
|
###################################################################
|
|
###################################################################
|
|
@@ -420,7 +420,7 @@ class TestAgent(object):
|
|
|
self.started = False
|
|
self.started = False
|
|
|
resh = RemoteFactory.rsh
|
|
resh = RemoteFactory.rsh
|
|
|
self.rsh = RemoteExec(resh)
|
|
self.rsh = RemoteExec(resh)
|
|
|
- self.func_name = None
|
|
|
|
|
|
|
+ self.__name__ = None
|
|
|
self.used = False
|
|
self.used = False
|
|
|
self.env = Env
|
|
self.env = Env
|
|
|
self.send_recv = False
|
|
self.send_recv = False
|
|
@@ -445,7 +445,7 @@ class TestAgent(object):
|
|
|
self.read()
|
|
self.read()
|
|
|
self.started = True
|
|
self.started = True
|
|
|
return True
|
|
return True
|
|
|
- except RuntimeError, msg:
|
|
|
|
|
|
|
+ except RuntimeError as msg:
|
|
|
self.started = False
|
|
self.started = False
|
|
|
return False
|
|
return False
|
|
|
|
|
|
|
@@ -465,7 +465,7 @@ class TestAgent(object):
|
|
|
retries = retries + 1
|
|
retries = retries + 1
|
|
|
self.sock.connect ((ip, self.port))
|
|
self.sock.connect ((ip, self.port))
|
|
|
is_connected = True
|
|
is_connected = True
|
|
|
- except socket.error, msg:
|
|
|
|
|
|
|
+ except socket.error as msg:
|
|
|
if retries > 10:
|
|
if retries > 10:
|
|
|
LogFactory().log("%s:%s Tried connecting %d times. %s" % (self.node, self.binary, retries, str(msg)))
|
|
LogFactory().log("%s:%s Tried connecting %d times. %s" % (self.node, self.binary, retries, str(msg)))
|
|
|
if retries > 30:
|
|
if retries > 30:
|
|
@@ -502,9 +502,11 @@ class TestAgent(object):
|
|
|
a_str = str(a)
|
|
a_str = str(a)
|
|
|
real_msg += ":" + str (len (a_str)) + ":" + a_str
|
|
real_msg += ":" + str (len (a_str)) + ":" + a_str
|
|
|
real_msg += ";"
|
|
real_msg += ";"
|
|
|
|
|
+ if sys.version_info > (3,):
|
|
|
|
|
+ real_msg = real_msg.encode("utf8")
|
|
|
try:
|
|
try:
|
|
|
return self.sock.send (real_msg)
|
|
return self.sock.send (real_msg)
|
|
|
- except socket.error, msg:
|
|
|
|
|
|
|
+ except socket.error as msg:
|
|
|
LogFactory().log("send(%s): %s; error: %s" % (self.node, real_msg, msg))
|
|
LogFactory().log("send(%s): %s; error: %s" % (self.node, real_msg, msg))
|
|
|
return 0
|
|
return 0
|
|
|
|
|
|
|
@@ -523,7 +525,7 @@ class TestAgent(object):
|
|
|
try:
|
|
try:
|
|
|
return object.__getattribute__(self, name)
|
|
return object.__getattribute__(self, name)
|
|
|
except:
|
|
except:
|
|
|
- self.func_name = name
|
|
|
|
|
|
|
+ self.__name__ = name
|
|
|
if self.send_recv:
|
|
if self.send_recv:
|
|
|
return self.send_recv_dynamic
|
|
return self.send_recv_dynamic
|
|
|
else:
|
|
else:
|
|
@@ -534,9 +536,9 @@ class TestAgent(object):
|
|
|
|
|
|
|
|
try:
|
|
try:
|
|
|
res = self.read ()
|
|
res = self.read ()
|
|
|
- except RuntimeError, msg:
|
|
|
|
|
|
|
+ except RuntimeError as msg:
|
|
|
res = None
|
|
res = None
|
|
|
- LogFactory().log("send_recv_dynamic: %s(); error: %s" % (self.func_name, msg))
|
|
|
|
|
|
|
+ LogFactory().log("send_recv_dynamic: %s(); error: %s" % (self.__name__, msg))
|
|
|
|
|
|
|
|
return res
|
|
return res
|
|
|
|
|
|
|
@@ -546,15 +548,17 @@ class TestAgent(object):
|
|
|
raise RuntimeError ("agent not started")
|
|
raise RuntimeError ("agent not started")
|
|
|
|
|
|
|
|
# number of args+func
|
|
# number of args+func
|
|
|
- real_msg = str (len (args) + 1) + ":" + str(len(self.func_name)) + ":" + self.func_name
|
|
|
|
|
|
|
+ real_msg = str (len (args) + 1) + ":" + str(len(self.__name__)) + ":" + self.__name__
|
|
|
for a in args:
|
|
for a in args:
|
|
|
a_str = str(a)
|
|
a_str = str(a)
|
|
|
real_msg += ":" + str (len (a_str)) + ":" + a_str
|
|
real_msg += ":" + str (len (a_str)) + ":" + a_str
|
|
|
real_msg += ";"
|
|
real_msg += ";"
|
|
|
sent = 0
|
|
sent = 0
|
|
|
|
|
+ if sys.version_info > (3,):
|
|
|
|
|
+ real_msg = bytes(real_msg, encoding = "utf8")
|
|
|
try:
|
|
try:
|
|
|
sent = self.sock.send (real_msg)
|
|
sent = self.sock.send (real_msg)
|
|
|
- except socket.error, msg:
|
|
|
|
|
|
|
+ except socket.error as msg:
|
|
|
LogFactory().log("send_dynamic(%s): %s; error: %s" % (self.node, real_msg, msg))
|
|
LogFactory().log("send_dynamic(%s): %s; error: %s" % (self.node, real_msg, msg))
|
|
|
|
|
|
|
|
if sent == 0:
|
|
if sent == 0:
|
|
@@ -565,15 +569,17 @@ class TestAgent(object):
|
|
|
|
|
|
|
|
try:
|
|
try:
|
|
|
msg = self.sock.recv (4096)
|
|
msg = self.sock.recv (4096)
|
|
|
- except socket.error, msg:
|
|
|
|
|
|
|
+ except socket.error as msg:
|
|
|
raise RuntimeError(msg)
|
|
raise RuntimeError(msg)
|
|
|
|
|
+ if sys.version_info > (3,):
|
|
|
|
|
+ msg = msg.decode("utf8")
|
|
|
|
|
|
|
|
if msg == '':
|
|
if msg == '':
|
|
|
raise RuntimeError("socket connection broken")
|
|
raise RuntimeError("socket connection broken")
|
|
|
return msg
|
|
return msg
|
|
|
|
|
|
|
|
|
|
|
|
|
-class CpgConfigEvent:
|
|
|
|
|
|
|
+class CpgConfigEvent(object):
|
|
|
def __init__(self, msg):
|
|
def __init__(self, msg):
|
|
|
info = msg.split(',')
|
|
info = msg.split(',')
|
|
|
self.group_name = info[0]
|
|
self.group_name = info[0]
|