mirror of https://github.com/apache/superset.git
refactor: Removes the deprecated DASHBOARD_CACHE feature flag (#26349)
This commit is contained in:
parent
9387c4c16f
commit
2d3ff8c0dc
|
@ -86,7 +86,6 @@ These features flags currently default to True and **will be removed in a future
|
|||
[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
|
||||
|
||||
- CLIENT_CACHE
|
||||
- DASHBOARD_CACHE
|
||||
- DASHBOARD_FILTERS_EXPERIMENTAL
|
||||
- DASHBOARD_NATIVE_FILTERS
|
||||
- ENABLE_EXPLORE_JSON_CSRF_PROTECTION
|
||||
|
|
|
@ -31,6 +31,7 @@ assists people when migrating to a new version.
|
|||
|
||||
### Breaking Changes
|
||||
|
||||
- [26349](https://github.com/apache/superset/issues/26349): Removes the deprecated `DASHBOARD_CACHE` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26369](https://github.com/apache/superset/issues/26369): Removes the Filter Sets feature including the deprecated `DASHBOARD_NATIVE_FILTERS_SET` feature flag and all related API endpoints. The feature is permanently removed as it was not being actively maintained, it was not widely used, and it was full of bugs. We also considered that if we were to provide a similar feature, it would be better to re-implement it from scratch given the amount of technical debt that the current implementation has. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26343](https://github.com/apache/superset/issues/26343): Removes the deprecated `ENABLE_EXPLORE_DRAG_AND_DROP` feature flag. The previous value of the feature flag was `True` and now the feature is permanently enabled.
|
||||
- [26331](https://github.com/apache/superset/issues/26331): Removes the deprecated `DISABLE_DATASET_SOURCE_EDIT` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
|
|
|
@ -433,7 +433,6 @@ DEFAULT_FEATURE_FLAGS: dict[str, bool] = {
|
|||
"PRESTO_EXPAND_DATA": False,
|
||||
# Exposes API endpoint to compute thumbnails
|
||||
"THUMBNAILS": False,
|
||||
"DASHBOARD_CACHE": False, # deprecated
|
||||
"REMOVE_SLICE_LEVEL_LABEL_COLORS": False, # deprecated
|
||||
"SHARE_QUERIES_VIA_KV_STORE": False,
|
||||
"TAGGING_SYSTEM": False,
|
||||
|
|
|
@ -83,7 +83,6 @@ from superset.models.dashboard import Dashboard
|
|||
from superset.models.embedded_dashboard import EmbeddedDashboard
|
||||
from superset.tasks.thumbnails import cache_dashboard_thumbnail
|
||||
from superset.tasks.utils import get_current_user
|
||||
from superset.utils.cache import etag_cache
|
||||
from superset.utils.screenshots import DashboardScreenshot
|
||||
from superset.utils.urls import get_url_path
|
||||
from superset.views.base import generate_download_headers
|
||||
|
@ -292,16 +291,6 @@ class DashboardRestApi(BaseSupersetModelRestApi):
|
|||
|
||||
@expose("/<id_or_slug>", methods=("GET",))
|
||||
@protect()
|
||||
@etag_cache(
|
||||
get_last_modified=lambda _self, id_or_slug: DashboardDAO.get_dashboard_changed_on( # pylint: disable=line-too-long,useless-suppression
|
||||
id_or_slug
|
||||
),
|
||||
max_age=0,
|
||||
raise_for_access=lambda _self, id_or_slug: DashboardDAO.get_by_id_or_slug(
|
||||
id_or_slug
|
||||
),
|
||||
skip=lambda _self, id_or_slug: not is_feature_enabled("DASHBOARD_CACHE"),
|
||||
)
|
||||
@safe
|
||||
@statsd_metrics
|
||||
@with_dashboard
|
||||
|
@ -349,16 +338,6 @@ class DashboardRestApi(BaseSupersetModelRestApi):
|
|||
|
||||
@expose("/<id_or_slug>/datasets", methods=("GET",))
|
||||
@protect()
|
||||
@etag_cache(
|
||||
get_last_modified=lambda _self, id_or_slug: DashboardDAO.get_dashboard_and_datasets_changed_on( # pylint: disable=line-too-long,useless-suppression
|
||||
id_or_slug
|
||||
),
|
||||
max_age=0,
|
||||
raise_for_access=lambda _self, id_or_slug: DashboardDAO.get_by_id_or_slug(
|
||||
id_or_slug
|
||||
),
|
||||
skip=lambda _self, id_or_slug: not is_feature_enabled("DASHBOARD_CACHE"),
|
||||
)
|
||||
@safe
|
||||
@statsd_metrics
|
||||
@event_logger.log_this_with_context(
|
||||
|
@ -419,16 +398,6 @@ class DashboardRestApi(BaseSupersetModelRestApi):
|
|||
|
||||
@expose("/<id_or_slug>/charts", methods=("GET",))
|
||||
@protect()
|
||||
@etag_cache(
|
||||
get_last_modified=lambda _self, id_or_slug: DashboardDAO.get_dashboard_and_slices_changed_on( # pylint: disable=line-too-long,useless-suppression
|
||||
id_or_slug
|
||||
),
|
||||
max_age=0,
|
||||
raise_for_access=lambda _self, id_or_slug: DashboardDAO.get_by_id_or_slug(
|
||||
id_or_slug
|
||||
),
|
||||
skip=lambda _self, id_or_slug: not is_feature_enabled("DASHBOARD_CACHE"),
|
||||
)
|
||||
@safe
|
||||
@statsd_metrics
|
||||
@event_logger.log_this_with_context(
|
||||
|
|
|
@ -20,7 +20,6 @@ import json
|
|||
import logging
|
||||
import uuid
|
||||
from collections import defaultdict
|
||||
from functools import partial
|
||||
from typing import Any, Callable
|
||||
|
||||
import sqlalchemy as sqla
|
||||
|
@ -42,17 +41,11 @@ from sqlalchemy import (
|
|||
from sqlalchemy.engine.base import Connection
|
||||
from sqlalchemy.orm import relationship, sessionmaker, subqueryload
|
||||
from sqlalchemy.orm.mapper import Mapper
|
||||
from sqlalchemy.orm.session import object_session
|
||||
from sqlalchemy.sql import join, select
|
||||
from sqlalchemy.sql.elements import BinaryExpression
|
||||
|
||||
from superset import app, db, is_feature_enabled, security_manager
|
||||
from superset.connectors.sqla.models import (
|
||||
BaseDatasource,
|
||||
SqlaTable,
|
||||
SqlMetric,
|
||||
TableColumn,
|
||||
)
|
||||
from superset.connectors.sqla.models import BaseDatasource, SqlaTable
|
||||
from superset.daos.datasource import DatasourceDAO
|
||||
from superset.extensions import cache_manager
|
||||
from superset.models.helpers import AuditMixinNullable, ImportExportMixin
|
||||
|
@ -286,11 +279,6 @@ class Dashboard(AuditMixinNullable, ImportExportMixin, Model):
|
|||
"is_managed_externally": self.is_managed_externally,
|
||||
}
|
||||
|
||||
@cache_manager.cache.memoize(
|
||||
# manage cache version manually
|
||||
make_name=lambda fname: f"{fname}-v1.0",
|
||||
unless=lambda: not is_feature_enabled("DASHBOARD_CACHE"),
|
||||
)
|
||||
def datasets_trimmed_for_slices(self) -> list[dict[str, Any]]:
|
||||
# Verbose but efficient database enumeration of dashboard datasources.
|
||||
slices_by_datasource: dict[
|
||||
|
@ -479,37 +467,3 @@ if is_feature_enabled("THUMBNAILS_SQLA_LISTENERS"):
|
|||
update_thumbnail: OnDashboardChange = lambda _, __, dash: dash.update_thumbnail()
|
||||
sqla.event.listen(Dashboard, "after_insert", update_thumbnail)
|
||||
sqla.event.listen(Dashboard, "after_update", update_thumbnail)
|
||||
|
||||
if is_feature_enabled("DASHBOARD_CACHE"):
|
||||
|
||||
def clear_dashboard_cache(
|
||||
_mapper: Mapper,
|
||||
_connection: Connection,
|
||||
obj: Slice | BaseDatasource | Dashboard,
|
||||
check_modified: bool = True,
|
||||
) -> None:
|
||||
if check_modified and not object_session(obj).is_modified(obj):
|
||||
# needed for avoiding excessive cache purging when duplicating a dashboard
|
||||
return
|
||||
if isinstance(obj, Dashboard):
|
||||
obj.clear_cache()
|
||||
elif isinstance(obj, Slice):
|
||||
Dashboard.clear_cache_for_slice(slice_id=obj.id)
|
||||
elif isinstance(obj, BaseDatasource):
|
||||
Dashboard.clear_cache_for_datasource(datasource_id=obj.id)
|
||||
elif isinstance(obj, (SqlMetric, TableColumn)):
|
||||
Dashboard.clear_cache_for_datasource(datasource_id=obj.table_id)
|
||||
|
||||
sqla.event.listen(Dashboard, "after_update", clear_dashboard_cache)
|
||||
sqla.event.listen(
|
||||
Dashboard, "after_delete", partial(clear_dashboard_cache, check_modified=False)
|
||||
)
|
||||
sqla.event.listen(Slice, "after_update", clear_dashboard_cache)
|
||||
sqla.event.listen(Slice, "after_delete", clear_dashboard_cache)
|
||||
sqla.event.listen(
|
||||
BaseDatasource, "after_update", clear_dashboard_cache, propagate=True
|
||||
)
|
||||
# also clear cache on column/metric updates since updates to these will not
|
||||
# trigger update events for BaseDatasource.
|
||||
sqla.event.listen(SqlMetric, "after_update", clear_dashboard_cache)
|
||||
sqla.event.listen(TableColumn, "after_update", clear_dashboard_cache)
|
||||
|
|
Loading…
Reference in New Issue