removed master from corehandlers and session, since it will not be needed any more
This commit is contained in:
parent
77c7bf798e
commit
fff281a452
6 changed files with 34 additions and 92 deletions
|
@ -83,13 +83,9 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
self.handler_threads.append(thread)
|
self.handler_threads.append(thread)
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
self.master = False
|
|
||||||
self.session = None
|
self.session = None
|
||||||
self.session_clients = {}
|
self.session_clients = {}
|
||||||
|
|
||||||
# core emulator
|
|
||||||
self.coreemu = server.coreemu
|
self.coreemu = server.coreemu
|
||||||
|
|
||||||
utils.close_onexec(request.fileno())
|
utils.close_onexec(request.fileno())
|
||||||
socketserver.BaseRequestHandler.__init__(self, request, client_address, server)
|
socketserver.BaseRequestHandler.__init__(self, request, client_address, server)
|
||||||
|
|
||||||
|
@ -591,12 +587,8 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
port = self.request.getpeername()[1]
|
port = self.request.getpeername()[1]
|
||||||
|
|
||||||
# TODO: add shutdown handler for session
|
# TODO: add shutdown handler for session
|
||||||
self.session = self.coreemu.create_session(port, master=False)
|
self.session = self.coreemu.create_session(port)
|
||||||
logging.debug("created new session for client: %s", self.session.id)
|
logging.debug("created new session for client: %s", self.session.id)
|
||||||
|
|
||||||
if self.master:
|
|
||||||
logging.debug("session set to master")
|
|
||||||
self.session.master = True
|
|
||||||
clients = self.session_clients.setdefault(self.session.id, [])
|
clients = self.session_clients.setdefault(self.session.id, [])
|
||||||
clients.append(self)
|
clients.append(self)
|
||||||
|
|
||||||
|
@ -942,7 +934,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
file_name = sys.argv[0]
|
file_name = sys.argv[0]
|
||||||
|
|
||||||
if os.path.splitext(file_name)[1].lower() == ".xml":
|
if os.path.splitext(file_name)[1].lower() == ".xml":
|
||||||
session = self.coreemu.create_session(master=False)
|
session = self.coreemu.create_session()
|
||||||
try:
|
try:
|
||||||
session.open_xml(file_name)
|
session.open_xml(file_name)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -1012,17 +1004,6 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
logging.debug("ignoring Register message")
|
logging.debug("ignoring Register message")
|
||||||
else:
|
else:
|
||||||
# register capabilities with the GUI
|
# register capabilities with the GUI
|
||||||
self.master = True
|
|
||||||
|
|
||||||
# find the session containing this client and set the session to master
|
|
||||||
for _id in self.coreemu.sessions:
|
|
||||||
clients = self.session_clients.get(_id, [])
|
|
||||||
if self in clients:
|
|
||||||
session = self.coreemu.sessions[_id]
|
|
||||||
logging.debug("setting session to master: %s", session.id)
|
|
||||||
session.master = True
|
|
||||||
break
|
|
||||||
|
|
||||||
replies.append(self.register())
|
replies.append(self.register())
|
||||||
replies.append(self.session_message())
|
replies.append(self.session_message())
|
||||||
|
|
||||||
|
@ -1441,11 +1422,6 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
config = ConfigShim.str_to_dict(values_str)
|
config = ConfigShim.str_to_dict(values_str)
|
||||||
self.session.emane.set_configs(config)
|
self.session.emane.set_configs(config)
|
||||||
|
|
||||||
# extra logic to start slave Emane object after nemid has been configured from the master
|
|
||||||
if message_type == ConfigFlags.UPDATE and self.session.master is False:
|
|
||||||
# instantiation was previously delayed by setup returning Emane.NOT_READY
|
|
||||||
self.session.instantiate()
|
|
||||||
|
|
||||||
return replies
|
return replies
|
||||||
|
|
||||||
def handle_config_emane_models(self, message_type, config_data):
|
def handle_config_emane_models(self, message_type, config_data):
|
||||||
|
@ -1613,20 +1589,11 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
for _id in self.session.nodes:
|
for _id in self.session.nodes:
|
||||||
self.send_node_emulation_id(_id)
|
self.send_node_emulation_id(_id)
|
||||||
elif event_type == EventTypes.RUNTIME_STATE:
|
elif event_type == EventTypes.RUNTIME_STATE:
|
||||||
if self.session.master:
|
logging.warning("Unexpected event message: RUNTIME state received")
|
||||||
logging.warning(
|
|
||||||
"Unexpected event message: RUNTIME state received at session master"
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
# master event queue is started in session.checkruntime()
|
|
||||||
self.session.start_events()
|
|
||||||
elif event_type == EventTypes.DATACOLLECT_STATE:
|
elif event_type == EventTypes.DATACOLLECT_STATE:
|
||||||
self.session.data_collect()
|
self.session.data_collect()
|
||||||
elif event_type == EventTypes.SHUTDOWN_STATE:
|
elif event_type == EventTypes.SHUTDOWN_STATE:
|
||||||
if self.session.master:
|
logging.warning("Unexpected event message: SHUTDOWN state received")
|
||||||
logging.warning(
|
|
||||||
"Unexpected event message: SHUTDOWN state received at session master"
|
|
||||||
)
|
|
||||||
elif event_type in {
|
elif event_type in {
|
||||||
EventTypes.START,
|
EventTypes.START,
|
||||||
EventTypes.STOP,
|
EventTypes.STOP,
|
||||||
|
@ -1824,9 +1791,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
# set session to join
|
# set session to join
|
||||||
self.session = session
|
self.session = session
|
||||||
|
|
||||||
# add client to session broker and set master if needed
|
# add client to session broker
|
||||||
if self.master:
|
|
||||||
self.session.master = True
|
|
||||||
clients = self.session_clients.setdefault(self.session.id, [])
|
clients = self.session_clients.setdefault(self.session.id, [])
|
||||||
clients.append(self)
|
clients.append(self)
|
||||||
|
|
||||||
|
@ -2022,7 +1987,6 @@ class CoreUdpHandler(CoreHandler):
|
||||||
MessageTypes.EVENT.value: self.handle_event_message,
|
MessageTypes.EVENT.value: self.handle_event_message,
|
||||||
MessageTypes.SESSION.value: self.handle_session_message,
|
MessageTypes.SESSION.value: self.handle_session_message,
|
||||||
}
|
}
|
||||||
self.master = False
|
|
||||||
self.session = None
|
self.session = None
|
||||||
self.coreemu = server.mainserver.coreemu
|
self.coreemu = server.mainserver.coreemu
|
||||||
socketserver.BaseRequestHandler.__init__(self, request, client_address, server)
|
socketserver.BaseRequestHandler.__init__(self, request, client_address, server)
|
||||||
|
|
|
@ -269,37 +269,34 @@ class EmaneManager(ModelManager):
|
||||||
|
|
||||||
# control network bridge required for EMANE 0.9.2
|
# control network bridge required for EMANE 0.9.2
|
||||||
# - needs to exist when eventservice binds to it (initeventservice)
|
# - needs to exist when eventservice binds to it (initeventservice)
|
||||||
if self.session.master:
|
otadev = self.get_config("otamanagerdevice")
|
||||||
otadev = self.get_config("otamanagerdevice")
|
netidx = self.session.get_control_net_index(otadev)
|
||||||
netidx = self.session.get_control_net_index(otadev)
|
logging.debug("emane ota manager device: index(%s) otadev(%s)", netidx, otadev)
|
||||||
logging.debug(
|
if netidx < 0:
|
||||||
"emane ota manager device: index(%s) otadev(%s)", netidx, otadev
|
logging.error(
|
||||||
|
"EMANE cannot start, check core config. invalid OTA device provided: %s",
|
||||||
|
otadev,
|
||||||
)
|
)
|
||||||
|
return EmaneManager.NOT_READY
|
||||||
|
|
||||||
|
self.session.add_remove_control_net(
|
||||||
|
net_index=netidx, remove=False, conf_required=False
|
||||||
|
)
|
||||||
|
eventdev = self.get_config("eventservicedevice")
|
||||||
|
logging.debug("emane event service device: eventdev(%s)", eventdev)
|
||||||
|
if eventdev != otadev:
|
||||||
|
netidx = self.session.get_control_net_index(eventdev)
|
||||||
|
logging.debug("emane event service device index: %s", netidx)
|
||||||
if netidx < 0:
|
if netidx < 0:
|
||||||
logging.error(
|
logging.error(
|
||||||
"EMANE cannot start, check core config. invalid OTA device provided: %s",
|
"EMANE cannot start, check core config. invalid event service device: %s",
|
||||||
otadev,
|
eventdev,
|
||||||
)
|
)
|
||||||
return EmaneManager.NOT_READY
|
return EmaneManager.NOT_READY
|
||||||
|
|
||||||
self.session.add_remove_control_net(
|
self.session.add_remove_control_net(
|
||||||
net_index=netidx, remove=False, conf_required=False
|
net_index=netidx, remove=False, conf_required=False
|
||||||
)
|
)
|
||||||
eventdev = self.get_config("eventservicedevice")
|
|
||||||
logging.debug("emane event service device: eventdev(%s)", eventdev)
|
|
||||||
if eventdev != otadev:
|
|
||||||
netidx = self.session.get_control_net_index(eventdev)
|
|
||||||
logging.debug("emane event service device index: %s", netidx)
|
|
||||||
if netidx < 0:
|
|
||||||
logging.error(
|
|
||||||
"EMANE cannot start, check core config. invalid event service device: %s",
|
|
||||||
eventdev,
|
|
||||||
)
|
|
||||||
return EmaneManager.NOT_READY
|
|
||||||
|
|
||||||
self.session.add_remove_control_net(
|
|
||||||
net_index=netidx, remove=False, conf_required=False
|
|
||||||
)
|
|
||||||
|
|
||||||
self.check_node_models()
|
self.check_node_models()
|
||||||
return EmaneManager.SUCCESS
|
return EmaneManager.SUCCESS
|
||||||
|
|
|
@ -86,12 +86,11 @@ class CoreEmu:
|
||||||
session = sessions[_id]
|
session = sessions[_id]
|
||||||
session.shutdown()
|
session.shutdown()
|
||||||
|
|
||||||
def create_session(self, _id=None, master=True, _cls=Session):
|
def create_session(self, _id=None, _cls=Session):
|
||||||
"""
|
"""
|
||||||
Create a new CORE session, set to master if running standalone.
|
Create a new CORE session.
|
||||||
|
|
||||||
:param int _id: session id for new session
|
:param int _id: session id for new session
|
||||||
:param bool master: sets session to master
|
|
||||||
:param class _cls: Session class to use
|
:param class _cls: Session class to use
|
||||||
:return: created session
|
:return: created session
|
||||||
:rtype: EmuSession
|
:rtype: EmuSession
|
||||||
|
@ -104,9 +103,6 @@ class CoreEmu:
|
||||||
|
|
||||||
session = _cls(_id, config=self.config)
|
session = _cls(_id, config=self.config)
|
||||||
logging.info("created session: %s", _id)
|
logging.info("created session: %s", _id)
|
||||||
if master:
|
|
||||||
session.master = True
|
|
||||||
|
|
||||||
self.sessions[_id] = session
|
self.sessions[_id] = session
|
||||||
return session
|
return session
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,6 @@ class Session:
|
||||||
:param bool mkdir: flag to determine if a directory should be made
|
:param bool mkdir: flag to determine if a directory should be made
|
||||||
"""
|
"""
|
||||||
self.id = _id
|
self.id = _id
|
||||||
self.master = False
|
|
||||||
|
|
||||||
# define and create session directory when desired
|
# define and create session directory when desired
|
||||||
self.session_dir = os.path.join(tempfile.gettempdir(), f"pycore.{self.id}")
|
self.session_dir = os.path.join(tempfile.gettempdir(), f"pycore.{self.id}")
|
||||||
|
@ -1694,28 +1693,19 @@ class Session:
|
||||||
prefixes = prefix_spec.split()
|
prefixes = prefix_spec.split()
|
||||||
if len(prefixes) > 1:
|
if len(prefixes) > 1:
|
||||||
# a list of per-host prefixes is provided
|
# a list of per-host prefixes is provided
|
||||||
assign_address = True
|
try:
|
||||||
if self.master:
|
# split first (master) entry into server and prefix
|
||||||
try:
|
prefix = prefixes[0].split(":", 1)[1]
|
||||||
# split first (master) entry into server and prefix
|
except IndexError:
|
||||||
prefix = prefixes[0].split(":", 1)[1]
|
# no server name. possibly only one server
|
||||||
except IndexError:
|
prefix = prefixes[0]
|
||||||
# no server name. possibly only one server
|
|
||||||
prefix = prefixes[0]
|
|
||||||
|
|
||||||
# len(prefixes) == 1
|
|
||||||
else:
|
else:
|
||||||
# TODO: can we get the server name from the servers.conf or from the node
|
|
||||||
# assignments?o
|
|
||||||
# with one prefix, only master gets a ctrlnet address
|
|
||||||
assign_address = self.master
|
|
||||||
prefix = prefixes[0]
|
prefix = prefixes[0]
|
||||||
|
|
||||||
logging.info(
|
logging.info(
|
||||||
"controlnet(%s) prefix(%s) assign(%s) updown(%s) serverintf(%s)",
|
"controlnet(%s) prefix(%s) updown(%s) serverintf(%s)",
|
||||||
_id,
|
_id,
|
||||||
prefix,
|
prefix,
|
||||||
assign_address,
|
|
||||||
updown_script,
|
updown_script,
|
||||||
server_interface,
|
server_interface,
|
||||||
)
|
)
|
||||||
|
@ -1723,7 +1713,7 @@ class Session:
|
||||||
cls=CtrlNet,
|
cls=CtrlNet,
|
||||||
_id=_id,
|
_id=_id,
|
||||||
prefix=prefix,
|
prefix=prefix,
|
||||||
assign_address=assign_address,
|
assign_address=True,
|
||||||
updown_script=updown_script,
|
updown_script=updown_script,
|
||||||
serverintf=server_interface,
|
serverintf=server_interface,
|
||||||
)
|
)
|
||||||
|
|
|
@ -75,7 +75,6 @@ def global_coreemu(patcher):
|
||||||
def global_session(request, patcher, global_coreemu):
|
def global_session(request, patcher, global_coreemu):
|
||||||
mkdir = not request.config.getoption("mock")
|
mkdir = not request.config.getoption("mock")
|
||||||
session = Session(1000, {"emane_prefix": "/usr"}, mkdir)
|
session = Session(1000, {"emane_prefix": "/usr"}, mkdir)
|
||||||
session.master = True
|
|
||||||
yield session
|
yield session
|
||||||
session.shutdown()
|
session.shutdown()
|
||||||
|
|
||||||
|
|
|
@ -606,13 +606,9 @@ class TestGui:
|
||||||
coretlv.handle_message(message)
|
coretlv.handle_message(message)
|
||||||
|
|
||||||
def test_register_gui(self, coretlv):
|
def test_register_gui(self, coretlv):
|
||||||
coretlv.master = False
|
|
||||||
message = coreapi.CoreRegMessage.create(0, [(RegisterTlvs.GUI, "gui")])
|
message = coreapi.CoreRegMessage.create(0, [(RegisterTlvs.GUI, "gui")])
|
||||||
|
|
||||||
coretlv.handle_message(message)
|
coretlv.handle_message(message)
|
||||||
|
|
||||||
assert coretlv.master is True
|
|
||||||
|
|
||||||
def test_register_xml(self, coretlv, tmpdir):
|
def test_register_xml(self, coretlv, tmpdir):
|
||||||
xml_file = tmpdir.join("coretlv.session.xml")
|
xml_file = tmpdir.join("coretlv.session.xml")
|
||||||
file_path = xml_file.strpath
|
file_path = xml_file.strpath
|
||||||
|
|
Loading…
Add table
Reference in a new issue