getsentry / getsentry/self-hosted

Backup import failure

Open
#3,083 23 comments 0 reactions 0 assignees View on GitHub
Bug Type: Bug
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.