You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-06-15 03:21:42 +03:00
84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
from .. import config
|
|
import time
|
|
from socket import *
|
|
import struct
|
|
import sys
|
|
|
|
_config = config.Config("failover/test/config-test.xml")
|
|
print("got desired_nodes = {}".format(_config.getDesiredNodes()))
|
|
print("got active_nodes = {}".format(_config.getActiveNodes()))
|
|
print("got inacive_nodes = {}".format(_config.getInactiveNodes()))
|
|
print("got all nodes = {}".format(_config.getAllNodes()))
|
|
print("got primarynode = {}".format(_config.getPrimaryNode()))
|
|
print()
|
|
|
|
from ..heartbeater import HeartBeater
|
|
from ..heartbeat_history import HBHistory
|
|
|
|
hbh = HBHistory()
|
|
hb = HeartBeater(_config, hbh)
|
|
hb.start()
|
|
sock = socket(type = SOCK_DGRAM)
|
|
sock.bind(('localhost', 12345))
|
|
|
|
# Updated heartbeater to send the reply to its own port, rather than to
|
|
# the port of the sending socket. Need to update this.
|
|
#msg = struct.pack("4sH", hb.areYouThereMsg, 1234)
|
|
#sock.sendto(msg, ('localhost', hb.port))
|
|
#print("sent the are-you-there msg")
|
|
#(data, remote) = sock.recvfrom(6)
|
|
#(data, seq) = struct.unpack("4sH", data)
|
|
#if data == hb.yesIAmMsg:
|
|
# print("got the yes-i-am msg, seq = {}".format(seq))
|
|
#else:
|
|
# print("got something other than the yes-i-am-msg")
|
|
|
|
hb.stop()
|
|
|
|
#from heartbeat_history import HBHistory
|
|
|
|
#hbh = HBHistory()
|
|
hbh.setCurrentTick(0)
|
|
hbh.gotHeartbeat("node1", 0)
|
|
hbh.setCurrentTick(1)
|
|
hbh.gotHeartbeat("node2", 1)
|
|
hbh.setCurrentTick(2)
|
|
hbh.setCurrentTick(10)
|
|
hbh.gotHeartbeat("node1", 9)
|
|
hbh.gotHeartbeat("node1", 2)
|
|
pongs = hbh.getNodeHistory("node1", 20)
|
|
print("Got pongs: {}".format(pongs))
|
|
|
|
print('''
|
|
This is currently a 'manual' test, meaning the user should watch for the expected output
|
|
In this case, because NM's identity checker will return 'node1', and that does not match
|
|
node[2-4], those nodes will appear to NodeMonitor to be offline. Our starting condition
|
|
is that nodes 1-3 are active, and node4 is inactive. After 15s, nodes 2 & 3
|
|
should be deactivated, a new primary node will be chosen, and and our AgentBase will start
|
|
printing these events.
|
|
''')
|
|
def testNodeMonitor1(nm):
|
|
nm.start()
|
|
print("Waiting for 20 secs, watch for output from AgentBase")
|
|
time.sleep(20)
|
|
nm.stop()
|
|
time.sleep(1)
|
|
print("NodeMonitor was stopped, did it produce the right output?")
|
|
|
|
from ..node_monitor import NodeMonitor
|
|
nm = NodeMonitor(config = _config, samplingInterval = 10)
|
|
# check whether node[1-4] are in the /etc/hosts file as localhost
|
|
addr1 = gethostbyname("node1")
|
|
addr2 = gethostbyname("node2")
|
|
addr3 = gethostbyname("node3")
|
|
addr4 = gethostbyname("node4")
|
|
if addr1 == '127.0.0.1' and addr2 == '127.0.0.1' and addr3 == '127.0.0.1' and addr4 == '127.0.0.1':
|
|
testNodeMonitor1(nm)
|
|
else:
|
|
print("Skipping testNodeMonitor1(). node[1-4] needs to be defined as 127.0.0.1 in /etc/hosts")
|
|
|
|
|
|
|
|
print("tester is finished")
|
|
|