daemon: adjustments for shutdown behavior to avoid issues when shutting down, when already shutdown for the various different cases, but to also make sure the pycore directory is removed

This commit is contained in:
Blake Harnden 2020-09-24 14:17:15 -07:00
parent b195891b3b
commit 0306f77147
3 changed files with 9 additions and 34 deletions

View file

@ -315,10 +315,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
""" """
logging.debug("stop session: %s", request) logging.debug("stop session: %s", request)
session = self.get_session(request.session_id, context) session = self.get_session(request.session_id, context)
session.data_collect() session.shutdown()
session.set_state(EventTypes.DATACOLLECT_STATE, send_event=True)
session.clear()
session.set_state(EventTypes.SHUTDOWN_STATE, send_event=True)
return core_pb2.StopSessionResponse(result=True) return core_pb2.StopSessionResponse(result=True)
def CreateSession( def CreateSession(

View file

@ -735,6 +735,11 @@ class CoreHandler(socketserver.BaseRequestHandler):
elif message.flags & MessageFlags.DELETE.value: elif message.flags & MessageFlags.DELETE.value:
with self._shutdown_lock: with self._shutdown_lock:
result = self.session.delete_node(node_id) result = self.session.delete_node(node_id)
if result and self.session.get_node_count() == 0:
self.session.set_state(EventTypes.SHUTDOWN_STATE)
self.session.delete_nodes()
self.session.distributed.shutdown()
self.session.sdt.shutdown()
# if we deleted a node broadcast out its removal # if we deleted a node broadcast out its removal
if result and message.flags & MessageFlags.STRING.value: if result and message.flags & MessageFlags.STRING.value:

View file

@ -756,23 +756,18 @@ class Session:
""" """
Shutdown all session nodes and remove the session directory. Shutdown all session nodes and remove the session directory.
""" """
if self.state == EventTypes.SHUTDOWN_STATE:
return
logging.info("session(%s) state(%s) shutting down", self.id, self.state) logging.info("session(%s) state(%s) shutting down", self.id, self.state)
self.set_state(EventTypes.DATACOLLECT_STATE, send_event=True) if self.state != EventTypes.SHUTDOWN_STATE:
self.set_state(EventTypes.SHUTDOWN_STATE, send_event=True) self.set_state(EventTypes.DATACOLLECT_STATE, send_event=True)
self.set_state(EventTypes.SHUTDOWN_STATE, send_event=True)
# clear out current core session # clear out current core session
self.clear() self.clear()
# shutdown sdt # shutdown sdt
self.sdt.shutdown() self.sdt.shutdown()
# remove this sessions working directory # remove this sessions working directory
preserve = self.options.get_config("preservedir") == "1" preserve = self.options.get_config("preservedir") == "1"
if not preserve: if not preserve:
shutil.rmtree(self.session_dir, ignore_errors=True) shutil.rmtree(self.session_dir, ignore_errors=True)
# call session shutdown handlers # call session shutdown handlers
for handler in self.shutdown_handlers: for handler in self.shutdown_handlers:
handler(self) handler(self)
@ -1116,7 +1111,6 @@ class Session:
if node: if node:
node.shutdown() node.shutdown()
self.sdt.delete_node(_id) self.sdt.delete_node(_id)
self.check_shutdown()
return node is not None return node is not None
def delete_nodes(self) -> None: def delete_nodes(self) -> None:
@ -1279,27 +1273,6 @@ class Session:
self.add_remove_control_net(2, remove=True) self.add_remove_control_net(2, remove=True)
self.add_remove_control_net(3, remove=True) self.add_remove_control_net(3, remove=True)
def check_shutdown(self) -> bool:
"""
Check if we have entered the shutdown state, when no running nodes
and links remain.
:return: True if should shutdown, False otherwise
"""
node_count = self.get_node_count()
logging.debug(
"session(%s) checking shutdown: %s nodes remaining", self.id, node_count
)
shutdown = False
if node_count == 0:
shutdown = True
# shutting down and clearing data for legacy gui
self.set_state(EventTypes.SHUTDOWN_STATE)
self.delete_nodes()
self.distributed.shutdown()
self.sdt.shutdown()
return shutdown
def short_session_id(self) -> str: def short_session_id(self) -> str:
""" """
Return a shorter version of the session ID, appropriate for Return a shorter version of the session ID, appropriate for