in ossdbtoolsservice/object_explorer/object_explorer_service.py [0:0]
def _handle_create_session_request(self, request_context: RequestContext, params: ConnectionDetails) -> None:
"""Handle a create object explorer session request"""
# Step 1: Create the session
try:
# Make sure we have the appropriate session params
utils.validate.is_not_none('params', params)
# Use the provider's default db if db name was not specified
if params.database_name is None or params.database_name == '':
if self._provider == utils.constants.MYSQL_PROVIDER_NAME:
params.database_name = self._service_provider[utils.constants.WORKSPACE_SERVICE_NAME].configuration.my_sql.default_database
elif self._provider == utils.constants.PG_PROVIDER_NAME:
params.database_name = self._service_provider[utils.constants.WORKSPACE_SERVICE_NAME].configuration.pgsql.default_database
# Use the provider's default port if port number was not specified
if not params.port:
params.port = utils.constants.DEFAULT_PORT[self._provider]
# Generate the session ID and create/store the session
session_id = self._generate_session_uri(params, self._provider)
session: ObjectExplorerSession = ObjectExplorerSession(session_id, params)
# Add the session to session map in a lock to prevent race conditions between check and add
with self._session_lock:
if session_id in self._session_map:
# Removed the exception for now. But we need to investigate why we would get this
if self._service_provider.logger is not None:
self._service_provider.logger.error(f'Object explorer session for {session_id} already exists!')
request_context.send_response(False)
return
self._session_map[session_id] = session
# Respond that the session was created
response = CreateSessionResponse(session_id)
request_context.send_response(response)
except Exception as e:
message = f'Failed to create OE session: {str(e)}'
if self._service_provider.logger is not None:
self._service_provider.logger.error(message)
request_context.send_error(message)
return
# Step 2: Connect the session and lookup the root node asynchronously
try:
session.init_task = threading.Thread(target=self._initialize_session, args=(request_context, session))
session.init_task.daemon = True
session.init_task.start()
except Exception as e:
# TODO: Localize
self._session_created_error(request_context, session, f'Failed to start OE init task: {str(e)}')