removed master from corehandlers and session, since it will not be needed any more

This commit is contained in:
bharnden 2019-10-25 22:06:30 -07:00
parent 77c7bf798e
commit fff281a452
6 changed files with 34 additions and 92 deletions

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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,
) )

View file

@ -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()

View file

@ -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