getsentry / getsentry/self-hosted
Backup import failure
- Dominant language
- Shell
- Stars
- 9.6k
- Forks
- 2k
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 12
Description
### Self-Hosted Version
23.12.1
### CPU Architecture
x86_64
### Docker Version
26.1.3
### Docker Compose Version
2.27.0
### Steps to Reproduce
1. `cd /path/to/sentry-dist/sentry`
2. Create a global backup: `docker compose run --rm -T web export global > backup.json`
3. Import backup: `docker compose run --rm -T web import global --no-prompt /etc/sentry/backup.json`
### Expected Result
Backup imported without issues
### Actual Result
Restore fails with the following exception:
```
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/django/db/models/fields/related_descriptors.py", line 173, in __get__
rel_obj = self.field.get_cached_value(instance)
File "/usr/local/lib/python3.10/site-packages/django/db/models/fields/mixins.py", line 15, in get_cached_value
return instance._state.fields_cache[cache_name]
KeyError: 'snuba_query'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/bin/sentry", line 8, in
sys.exit(main())
File "/usr/local/lib/python3.10/site-packages/sentry/runner/__init__.py", line 195, in main
func(**kwargs)
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context(), *args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/sentry/runner/decorators.py", line 29, in inner
return ctx.invoke(f, *args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/sentry/runner/commands/backup.py", line 722, in import_global
import_in_global_scope(
File "/usr/local/lib/python3.10/site-packages/sentry/backup/imports.py", line 479, in import_in_global_scope
return _import(
File "/usr/local/lib/python3.10/site-packages/sentry/backup/imports.py", line 358, in _import
_clear_model_tables_before_import()
File "/usr/local/lib/python3.10/site-packages/sentry/backup/imports.py", line 60, in _clear_model_tables_before_import
manager.all().delete() # type: ignore
File "/usr/local/lib/python3.10/site-packages/sentry/silo/base.py", line 156, in override
return original_method(*args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 746, in delete
deleted, _rows_count = collector.delete()
File "/usr/local/lib/python3.10/site-packages/django/db/models/deletion.py", line 435, in delete
signals.post_delete.send(
File "/usr/local/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 180, in send
return [
File "/usr/local/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 181, in
(receiver, receiver(signal=self, sender=sender, **named))
File "/usr/local/lib/python3.10/site-packages/sentry/incidents/models.py", line 394, in clear_alert_rule_subscription_caches
snuba_query=instance.snuba_query
File "/usr/local/lib/python3.10/site-packages/django/db/models/fields/related_descriptors.py", line 187, in __get__
rel_obj = self.get_object(instance)
File "/usr/local/lib/python3.10/site-packages/django/db/models/fields/related_descriptors.py", line 154, in get_object
return qs.get(self.field.get_reverse_related_filter(instance))
File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 435, in get
raise self.model.DoesNotExist(
sentry.snuba.models.SnubaQuery.DoesNotExist: SnubaQuery matching query does not exist.
```
### Event ID
_No response_
Contributor guide
Research direction
Reproduce the failure with the documented Docker Compose export and import commands, then start in sentry/backup/imports.py at _clear_model_tables_before_import. Read the post-delete handler in sentry/incidents/models.py and the import entry point in sentry/runner/commands/backup.py. Done means a global backup imports without the missing SnubaQuery exception.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- django, docker, docker-compose, python
- Domain
- backend, database
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100