chore: add stack trace to all calls of logger.error (#14382)
This commit is contained in:
parent
13cfc421d5
commit
11260b3117
|
|
@ -311,7 +311,10 @@ class AnnotationRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=ex.normalized_messages())
|
||||
except AnnotationCreateFailedError as ex:
|
||||
logger.error(
|
||||
"Error creating annotation %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error creating annotation %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -384,7 +387,10 @@ class AnnotationRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=ex.normalized_messages())
|
||||
except AnnotationUpdateFailedError as ex:
|
||||
logger.error(
|
||||
"Error updating annotation %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error updating annotation %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -436,7 +442,10 @@ class AnnotationRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_404()
|
||||
except AnnotationDeleteFailedError as ex:
|
||||
logger.error(
|
||||
"Error deleting annotation %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error deleting annotation %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
|
|||
|
|
@ -158,6 +158,7 @@ class AnnotationLayerRestApi(BaseSupersetModelRestApi):
|
|||
"Error deleting annotation layer %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -220,7 +221,10 @@ class AnnotationLayerRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=ex.normalized_messages())
|
||||
except AnnotationLayerCreateFailedError as ex:
|
||||
logger.error(
|
||||
"Error creating annotation %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error creating annotation %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -290,7 +294,10 @@ class AnnotationLayerRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=ex.normalized_messages())
|
||||
except AnnotationLayerUpdateFailedError as ex:
|
||||
logger.error(
|
||||
"Error updating annotation %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error updating annotation %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ class CacheRestApi(BaseSupersetModelRestApi):
|
|||
len(datasource_uids),
|
||||
)
|
||||
except SQLAlchemyError as ex: # pragma: no cover
|
||||
logger.error(ex)
|
||||
logger.error(ex, exc_info=True)
|
||||
db.session.rollback()
|
||||
return self.response_500(str(ex))
|
||||
db.session.commit()
|
||||
|
|
|
|||
|
|
@ -277,7 +277,10 @@ class ChartRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=ex.normalized_messages())
|
||||
except ChartCreateFailedError as ex:
|
||||
logger.error(
|
||||
"Error creating model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error creating model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -352,7 +355,10 @@ class ChartRestApi(BaseSupersetModelRestApi):
|
|||
response = self.response_422(message=ex.normalized_messages())
|
||||
except ChartUpdateFailedError as ex:
|
||||
logger.error(
|
||||
"Error updating model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error updating model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
response = self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -407,7 +413,10 @@ class ChartRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_403()
|
||||
except ChartDeleteFailedError as ex:
|
||||
logger.error(
|
||||
"Error deleting model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error deleting model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
|
|||
|
|
@ -332,7 +332,9 @@ class QueryContext:
|
|||
except KeyError as ex:
|
||||
logger.exception(ex)
|
||||
logger.error(
|
||||
"Error reading cache: %s", error_msg_from_exception(ex)
|
||||
"Error reading cache: %s",
|
||||
error_msg_from_exception(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
logger.info("Serving from cache")
|
||||
|
||||
|
|
|
|||
|
|
@ -459,7 +459,10 @@ class DashboardRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=ex.normalized_messages())
|
||||
except DashboardCreateFailedError as ex:
|
||||
logger.error(
|
||||
"Error creating model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error creating model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -532,7 +535,10 @@ class DashboardRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=ex.normalized_messages())
|
||||
except DashboardUpdateFailedError as ex:
|
||||
logger.error(
|
||||
"Error updating model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error updating model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
response = self.response_422(message=str(ex))
|
||||
return response
|
||||
|
|
@ -586,7 +592,10 @@ class DashboardRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_403()
|
||||
except DashboardDeleteFailedError as ex:
|
||||
logger.error(
|
||||
"Error deleting model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error deleting model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
|
|||
|
|
@ -243,7 +243,10 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=str(ex))
|
||||
except DatabaseCreateFailedError as ex:
|
||||
logger.error(
|
||||
"Error creating model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error creating model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -320,7 +323,10 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=str(ex))
|
||||
except DatabaseUpdateFailedError as ex:
|
||||
logger.error(
|
||||
"Error updating model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error updating model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -373,7 +379,10 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=str(ex))
|
||||
except DatabaseDeleteFailedError as ex:
|
||||
logger.error(
|
||||
"Error deleting model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error deleting model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -800,7 +809,7 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
|
|||
logger.warning("Import database failed")
|
||||
return self.response_422(message=exc.normalized_messages())
|
||||
except DatabaseImportError as exc:
|
||||
logger.error("Import database failed")
|
||||
logger.error("Import database failed", exc_info=True)
|
||||
return self.response_500(message=str(exc))
|
||||
|
||||
@expose("/<int:pk>/function_names/", methods=["GET"])
|
||||
|
|
|
|||
|
|
@ -239,7 +239,10 @@ class DatasetRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_422(message=ex.normalized_messages())
|
||||
except DatasetCreateFailedError as ex:
|
||||
logger.error(
|
||||
"Error creating model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error creating model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -325,7 +328,10 @@ class DatasetRestApi(BaseSupersetModelRestApi):
|
|||
response = self.response_422(message=ex.normalized_messages())
|
||||
except DatasetUpdateFailedError as ex:
|
||||
logger.error(
|
||||
"Error updating model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error updating model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
response = self.response_422(message=str(ex))
|
||||
return response
|
||||
|
|
@ -379,7 +385,10 @@ class DatasetRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_403()
|
||||
except DatasetDeleteFailedError as ex:
|
||||
logger.error(
|
||||
"Error deleting model %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error deleting model %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -512,7 +521,10 @@ class DatasetRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_403()
|
||||
except DatasetRefreshFailedError as ex:
|
||||
logger.error(
|
||||
"Error refreshing dataset %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error refreshing dataset %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -716,5 +728,5 @@ class DatasetRestApi(BaseSupersetModelRestApi):
|
|||
logger.warning("Import dataset failed")
|
||||
return self.response_422(message=exc.normalized_messages())
|
||||
except DatasetImportError as exc:
|
||||
logger.error("Import dataset failed")
|
||||
logger.error("Import dataset failed", exc_info=True)
|
||||
return self.response_500(message=str(exc))
|
||||
|
|
|
|||
|
|
@ -99,6 +99,9 @@ class DatasetColumnsRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_403()
|
||||
except DatasetColumnDeleteFailedError as ex:
|
||||
logger.error(
|
||||
"Error deleting dataset column %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error deleting dataset column %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
|
|
|||
|
|
@ -66,7 +66,8 @@ class BulkDeleteDatasetCommand(BaseCommand):
|
|||
else:
|
||||
if not view_menu:
|
||||
logger.error(
|
||||
"Could not find the data access permission for the dataset"
|
||||
"Could not find the data access permission for the dataset",
|
||||
exc_info=True,
|
||||
)
|
||||
db.session.commit()
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,8 @@ class DeleteDatasetCommand(BaseCommand):
|
|||
else:
|
||||
if not view_menu:
|
||||
logger.error(
|
||||
"Could not find the data access permission for the dataset"
|
||||
"Could not find the data access permission for the dataset",
|
||||
exc_info=True,
|
||||
)
|
||||
db.session.commit()
|
||||
except (SQLAlchemyError, DAODeleteFailedError) as ex:
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ class DatasetDAO(BaseDAO): # pylint: disable=too-many-public-methods
|
|||
try:
|
||||
return db.session.query(Database).filter_by(id=database_id).one_or_none()
|
||||
except SQLAlchemyError as ex: # pragma: no cover
|
||||
logger.error("Could not get database by id: %s", str(ex))
|
||||
logger.error("Could not get database by id: %s", str(ex), exc_info=True)
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
|
|
|
|||
|
|
@ -99,6 +99,9 @@ class DatasetMetricRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_403()
|
||||
except DatasetMetricDeleteFailedError as ex:
|
||||
logger.error(
|
||||
"Error deleting dataset column %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error deleting dataset column %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
|
|
|||
|
|
@ -836,7 +836,7 @@ class BaseEngineSpec: # pylint: disable=too-many-public-methods
|
|||
# It's expected that some dialects don't implement the comment method
|
||||
pass
|
||||
except Exception as ex: # pylint: disable=broad-except
|
||||
logger.error("Unexpected error while fetching table comment")
|
||||
logger.error("Unexpected error while fetching table comment", exc_info=True)
|
||||
logger.exception(ex)
|
||||
return comment
|
||||
|
||||
|
|
@ -1218,7 +1218,7 @@ class BaseEngineSpec: # pylint: disable=too-many-public-methods
|
|||
try:
|
||||
extra = json.loads(database.extra)
|
||||
except json.JSONDecodeError as ex:
|
||||
logger.error(ex)
|
||||
logger.error(ex, exc_info=True)
|
||||
raise ex
|
||||
return extra
|
||||
|
||||
|
|
|
|||
|
|
@ -523,6 +523,7 @@ class HiveEngineSpec(PrestoEngineSpec):
|
|||
"Expected column `%s`, found: %s.",
|
||||
cls._show_functions_column,
|
||||
", ".join(columns),
|
||||
exc_info=True,
|
||||
)
|
||||
# if the results have a single column, use that
|
||||
if len(columns) == 1:
|
||||
|
|
|
|||
|
|
@ -176,7 +176,9 @@ class Database(
|
|||
# function_names property is used in bulk APIs and should not hard crash
|
||||
# more info in: https://github.com/apache/superset/issues/9678
|
||||
logger.error(
|
||||
"Failed to fetch database function names with error: %s", str(ex)
|
||||
"Failed to fetch database function names with error: %s",
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return []
|
||||
|
||||
|
|
@ -594,7 +596,7 @@ class Database(
|
|||
try:
|
||||
encrypted_extra = json.loads(self.encrypted_extra)
|
||||
except json.JSONDecodeError as ex:
|
||||
logger.error(ex)
|
||||
logger.error(ex, exc_info=True)
|
||||
raise ex
|
||||
return encrypted_extra
|
||||
|
||||
|
|
|
|||
|
|
@ -213,6 +213,7 @@ class ImportExportMixin:
|
|||
cls.__name__,
|
||||
str(obj_query),
|
||||
yaml.safe_dump(dict_rep),
|
||||
exc_info=True,
|
||||
)
|
||||
raise ex
|
||||
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ class Slice(
|
|||
try:
|
||||
form_data = json.loads(self.params)
|
||||
except Exception as ex: # pylint: disable=broad-except
|
||||
logger.error("Malformed json in slice's params")
|
||||
logger.error("Malformed json in slice's params", exc_info=True)
|
||||
logger.exception(ex)
|
||||
form_data.update(
|
||||
{
|
||||
|
|
|
|||
|
|
@ -239,6 +239,7 @@ class ReportScheduleRestApi(BaseSupersetModelRestApi):
|
|||
"Error deleting report schedule %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -300,6 +301,7 @@ class ReportScheduleRestApi(BaseSupersetModelRestApi):
|
|||
"Error creating report schedule %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
@ -368,7 +370,10 @@ class ReportScheduleRestApi(BaseSupersetModelRestApi):
|
|||
return self.response_403()
|
||||
except ReportScheduleUpdateFailedError as ex:
|
||||
logger.error(
|
||||
"Error updating report %s: %s", self.__class__.__name__, str(ex)
|
||||
"Error updating report %s: %s",
|
||||
self.__class__.__name__,
|
||||
str(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
return self.response_422(message=str(ex))
|
||||
|
||||
|
|
|
|||
|
|
@ -102,9 +102,13 @@ def handle_query_error(
|
|||
|
||||
def get_query_backoff_handler(details: Dict[Any, Any]) -> None:
|
||||
query_id = details["kwargs"]["query_id"]
|
||||
logger.error("Query with id `%s` could not be retrieved", str(query_id))
|
||||
logger.error(
|
||||
"Query with id `%s` could not be retrieved", str(query_id), exc_info=True
|
||||
)
|
||||
stats_logger.incr("error_attempting_orm_query_{}".format(details["tries"] - 1))
|
||||
logger.error("Query %s: Sleeping for a sec before retrying...", str(query_id))
|
||||
logger.error(
|
||||
"Query %s: Sleeping for a sec before retrying...", str(query_id), exc_info=True
|
||||
)
|
||||
|
||||
|
||||
def get_query_giveup_handler(_: Any) -> None:
|
||||
|
|
@ -247,7 +251,7 @@ def execute_sql_statement(
|
|||
)
|
||||
data = db_engine_spec.fetch_data(cursor, query.limit)
|
||||
except Exception as ex:
|
||||
logger.error("Query %d: %s", query.id, type(ex))
|
||||
logger.error("Query %d: %s", query.id, type(ex), exc_info=True)
|
||||
logger.debug("Query %d: %s", query.id, ex)
|
||||
raise SqlLabException(db_engine_spec.extract_error_message(ex))
|
||||
|
||||
|
|
|
|||
|
|
@ -272,7 +272,7 @@ def cache_warmup(
|
|||
break
|
||||
else:
|
||||
message = f"No strategy {strategy_name} found!"
|
||||
logger.error(message)
|
||||
logger.error(message, exc_info=True)
|
||||
return message
|
||||
|
||||
logger.info("Loading %s", class_.__name__)
|
||||
|
|
|
|||
|
|
@ -83,7 +83,9 @@ def execute(report_schedule_id: int, scheduled_dttm: str) -> None:
|
|||
task_id, report_schedule_id, scheduled_dttm_,
|
||||
).run()
|
||||
except ReportScheduleUnexpectedError as ex:
|
||||
logger.error("An unexpected occurred while executing the report: %s", ex)
|
||||
logger.error(
|
||||
"An unexpected occurred while executing the report: %s", ex, exc_info=True
|
||||
)
|
||||
except CommandException as ex:
|
||||
logger.info("Report state: %s", ex)
|
||||
|
||||
|
|
@ -95,4 +97,8 @@ def prune_log() -> None:
|
|||
except SoftTimeLimitExceeded as ex:
|
||||
logger.warning("A timeout occurred while pruning report schedule logs: %s", ex)
|
||||
except CommandException as ex:
|
||||
logger.error("An exception occurred while pruning report schedule logs: %s", ex)
|
||||
logger.error(
|
||||
"An exception occurred while pruning report schedule logs: %s",
|
||||
ex,
|
||||
exc_info=True,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -360,7 +360,7 @@ def flasher(msg: str, severity: str = "message") -> None:
|
|||
flash(msg, severity)
|
||||
except RuntimeError:
|
||||
if severity == "danger":
|
||||
logger.error(msg)
|
||||
logger.error(msg, exc_info=True)
|
||||
else:
|
||||
logger.info(msg)
|
||||
|
||||
|
|
@ -753,7 +753,7 @@ def validate_json(obj: Union[bytes, bytearray, str]) -> None:
|
|||
try:
|
||||
json.loads(obj)
|
||||
except Exception as ex:
|
||||
logger.error("JSON is not valid %s", str(ex))
|
||||
logger.error("JSON is not valid %s", str(ex), exc_info=True)
|
||||
raise SupersetException("JSON is not valid")
|
||||
|
||||
|
||||
|
|
@ -769,7 +769,7 @@ class SigalrmTimeout:
|
|||
def handle_timeout( # pylint: disable=unused-argument
|
||||
self, signum: int, frame: Any
|
||||
) -> None:
|
||||
logger.error("Process timed out")
|
||||
logger.error("Process timed out", exc_info=True)
|
||||
raise SupersetTimeoutException(
|
||||
error_type=SupersetErrorType.BACKEND_TIMEOUT_ERROR,
|
||||
message=self.error_message,
|
||||
|
|
|
|||
|
|
@ -119,9 +119,9 @@ class WebDriverProxy:
|
|||
logger.info("Taking a PNG screenshot or url %s", url)
|
||||
img = element.screenshot_as_png
|
||||
except TimeoutException:
|
||||
logger.error("Selenium timed out requesting url %s", url)
|
||||
logger.error("Selenium timed out requesting url %s", url, exc_info=True)
|
||||
except WebDriverException as ex:
|
||||
logger.error(ex)
|
||||
logger.error(ex, exc_info=True)
|
||||
# Some webdrivers do not support screenshots for elements.
|
||||
# In such cases, take a screenshot of the entire page.
|
||||
img = driver.screenshot() # pylint: disable=no-member
|
||||
|
|
|
|||
|
|
@ -1914,7 +1914,7 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
|
|||
"Can't find User '%(name)s', please ask your admin " "to create one.",
|
||||
name=user_name,
|
||||
)
|
||||
logger.error(err_msg)
|
||||
logger.error(err_msg, exc_info=True)
|
||||
return json_error_response(err_msg)
|
||||
cluster = (
|
||||
db.session.query(DruidCluster)
|
||||
|
|
@ -1926,7 +1926,7 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
|
|||
"Can't find DruidCluster with cluster_name = " "'%(name)s'",
|
||||
name=cluster_name,
|
||||
)
|
||||
logger.error(err_msg)
|
||||
logger.error(err_msg, exc_info=True)
|
||||
return json_error_response(err_msg)
|
||||
try:
|
||||
DruidDatasource.sync_to_db_from_config(druid_config, user, cluster)
|
||||
|
|
@ -2492,7 +2492,7 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
|
|||
query_id = query.id
|
||||
session.commit() # shouldn't be necessary
|
||||
except SQLAlchemyError as ex:
|
||||
logger.error("Errors saving query details %s", str(ex))
|
||||
logger.error("Errors saving query details %s", str(ex), exc_info=True)
|
||||
session.rollback()
|
||||
raise Exception(_("Query record was not created as expected."))
|
||||
if not query_id:
|
||||
|
|
|
|||
|
|
@ -509,7 +509,8 @@ class BaseViz:
|
|||
except Exception as ex:
|
||||
logger.exception(ex)
|
||||
logger.error(
|
||||
"Error reading cache: " + utils.error_msg_from_exception(ex)
|
||||
"Error reading cache: " + utils.error_msg_from_exception(ex),
|
||||
exc_info=True,
|
||||
)
|
||||
logger.info("Serving from cache")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue