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 baserow/baserow!3298
This commit is contained in:
commit
ef75ae88a2
7 changed files with 31 additions and 6 deletions
backend/src/baserow
contrib
core
changelog/entries/unreleased/bug
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
|
@ -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,
|
||||
)
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
|
|
|
@ -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"
|
||||
}
|
Loading…
Add table
Reference in a new issue