1
0
Fork 0
mirror of https://gitlab.com/bramw/baserow.git synced 2025-04-06 22:08:52 +00:00

Merge branch 'builder-fix-schema-cache-issue' into 'develop'

Fix schema cache issue

See merge request 
This commit is contained in:
Jérémie Pardou 2025-03-24 15:34:43 +01:00
commit ef75ae88a2
7 changed files with 31 additions and 6 deletions
backend/src/baserow
contrib
database/table
integrations
core
changelog/entries/unreleased/bug

View file

@ -67,11 +67,16 @@ def clear_generated_model_cache():
def invalidate_table_in_model_cache(table_id: int):
from baserow.contrib.database.table.models import Table
from baserow.contrib.database.table.signals import table_schema_changed
# Send signal for other potential cached values
table_schema_changed.send(Table, table_id=table_id)
if settings.BASEROW_DISABLE_MODEL_CACHE:
return None
new_version = str(uuid.uuid4())
# Make sure to invalidate ourselves and any directly connected tables.
from baserow.contrib.database.table.models import Table
Table.objects_and_trash.filter(id=table_id).update(version=new_version)

View file

@ -8,6 +8,7 @@ table_created = Signal()
table_updated = Signal()
table_deleted = Signal()
tables_reordered = Signal()
table_schema_changed = Signal()
@receiver(post_delete, sender=Table)

View file

@ -0,0 +1,11 @@
from django.dispatch import receiver
from baserow.contrib.database.table.signals import table_schema_changed
from baserow.core.cache import global_cache, local_cache
@receiver(table_schema_changed)
def invalidate_table_cache(sender, table_id, **kwargs):
# Invalidate local cache when the table schema is updated
global_cache.invalidate(f"table_{table_id}__service_schema")
local_cache.delete(f"integration_service_{table_id}_table_model")

View file

@ -495,7 +495,7 @@ class LocalBaserowTableServiceType(LocalBaserowServiceType):
return None
properties = global_cache.get(
f"table_{service.table_id}_{service.table.version}__service_schema",
f"table_{service.table_id}__service_schema",
default=lambda: self._get_table_properties(service, allowed_fields),
timeout=SCHEMA_CACHE_TTL,
)

View file

@ -1,7 +1,6 @@
from baserow.contrib.integrations.local_baserow.receivers import invalidate_table_cache
from baserow.contrib.integrations.local_baserow.signals import (
handle_local_baserow_field_updated_changes,
)
__all__ = [
"handle_local_baserow_field_updated_changes",
]
__all__ = ["handle_local_baserow_field_updated_changes", "invalidate_table_cache"]

View file

@ -65,7 +65,8 @@ class LocalCache:
):
del self._local.cache[k]
else:
del self._local.cache[key]
if key in self._local.cache:
del self._local.cache[key]
def clear(self):
"""

View file

@ -0,0 +1,8 @@
{
"type": "bug",
"message": "Fix cache invalidation on field change for data sources",
"domain": "builder",
"issue_number": null,
"bullet_points": [],
"created_at": "2025-03-24"
}