Fix edge case with multiple superusers
This commit is contained in:
parent
1e7603024e
commit
a630ccd51c
3 changed files with 37 additions and 34 deletions
|
|
@ -839,7 +839,7 @@ class DefaultAccount(with_metaclass(TypeclassBase, AccountDB)):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# if we have saved protocol flags on ourselves, load them here.
|
# if we have saved protocol flags on ourselves, load them here.
|
||||||
protocol_flags = self.attributes.get("_saved_protocol_flags", None)
|
protocol_flags = self.attributes.get("_saved_protocol_flags", {})
|
||||||
if session and protocol_flags:
|
if session and protocol_flags:
|
||||||
session.update_flags(**protocol_flags)
|
session.update_flags(**protocol_flags)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -198,44 +198,47 @@ class AMPServerClientProtocol(amp.AMPMultiConnectionProtocol):
|
||||||
operation = kwargs.pop("operation", "")
|
operation = kwargs.pop("operation", "")
|
||||||
server_sessionhandler = self.factory.server.sessions
|
server_sessionhandler = self.factory.server.sessions
|
||||||
|
|
||||||
if operation == amp.PCONN: # portal_session_connect
|
try:
|
||||||
# create a new session and sync it
|
if operation == amp.PCONN: # portal_session_connect
|
||||||
server_sessionhandler.portal_connect(kwargs.get("sessiondata"))
|
# create a new session and sync it
|
||||||
|
server_sessionhandler.portal_connect(kwargs.get("sessiondata"))
|
||||||
|
|
||||||
elif operation == amp.PCONNSYNC: # portal_session_sync
|
elif operation == amp.PCONNSYNC: # portal_session_sync
|
||||||
server_sessionhandler.portal_session_sync(kwargs.get("sessiondata"))
|
server_sessionhandler.portal_session_sync(kwargs.get("sessiondata"))
|
||||||
|
|
||||||
elif operation == amp.PDISCONN: # portal_session_disconnect
|
elif operation == amp.PDISCONN: # portal_session_disconnect
|
||||||
# session closed from portal sid
|
# session closed from portal sid
|
||||||
session = server_sessionhandler.get(sessid)
|
session = server_sessionhandler.get(sessid)
|
||||||
if session:
|
if session:
|
||||||
server_sessionhandler.portal_disconnect(session)
|
server_sessionhandler.portal_disconnect(session)
|
||||||
|
|
||||||
elif operation == amp.PDISCONNALL: # portal_disconnect_all
|
elif operation == amp.PDISCONNALL: # portal_disconnect_all
|
||||||
# portal orders all sessions to close
|
# portal orders all sessions to close
|
||||||
server_sessionhandler.portal_disconnect_all()
|
server_sessionhandler.portal_disconnect_all()
|
||||||
|
|
||||||
elif operation == amp.PSYNC: # portal_session_sync
|
elif operation == amp.PSYNC: # portal_session_sync
|
||||||
# force a resync of sessions from the portal side. This happens on
|
# force a resync of sessions from the portal side. This happens on
|
||||||
# first server-connect.
|
# first server-connect.
|
||||||
server_restart_mode = kwargs.get("server_restart_mode", "shutdown")
|
server_restart_mode = kwargs.get("server_restart_mode", "shutdown")
|
||||||
self.factory.server.run_init_hooks(server_restart_mode)
|
self.factory.server.run_init_hooks(server_restart_mode)
|
||||||
server_sessionhandler.portal_sessions_sync(kwargs.get("sessiondata"))
|
server_sessionhandler.portal_sessions_sync(kwargs.get("sessiondata"))
|
||||||
|
|
||||||
elif operation == amp.SRELOAD: # server reload
|
elif operation == amp.SRELOAD: # server reload
|
||||||
# shut down in reload mode
|
# shut down in reload mode
|
||||||
server_sessionhandler.all_sessions_portal_sync()
|
server_sessionhandler.all_sessions_portal_sync()
|
||||||
server_sessionhandler.server.shutdown(mode='reload')
|
server_sessionhandler.server.shutdown(mode='reload')
|
||||||
|
|
||||||
elif operation == amp.SRESET:
|
elif operation == amp.SRESET:
|
||||||
# shut down in reset mode
|
# shut down in reset mode
|
||||||
server_sessionhandler.all_sessions_portal_sync()
|
server_sessionhandler.all_sessions_portal_sync()
|
||||||
server_sessionhandler.server.shutdown(mode='reset')
|
server_sessionhandler.server.shutdown(mode='reset')
|
||||||
|
|
||||||
elif operation == amp.SSHUTD: # server shutdown
|
elif operation == amp.SSHUTD: # server shutdown
|
||||||
# shutdown in stop mode
|
# shutdown in stop mode
|
||||||
server_sessionhandler.server.shutdown(mode='shutdown')
|
server_sessionhandler.server.shutdown(mode='shutdown')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise Exception("operation %(op)s not recognized." % {'op': operation})
|
raise Exception("operation %(op)s not recognized." % {'op': operation})
|
||||||
|
except Exception:
|
||||||
|
logger.log_trace()
|
||||||
return {}
|
return {}
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,7 @@ class Session(object):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if self.account:
|
if self.account:
|
||||||
self.protocol_flags.update(self.account.attributes.get("_saved_protocol_flags", {}))
|
self.protocol_flags.update(self.account.attributes.get("_saved_protocol_flags", None) or {})
|
||||||
|
|
||||||
# access hooks
|
# access hooks
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue