-
-
Notifications
You must be signed in to change notification settings - Fork 87
[qa] Use in-memory DB for migration checks #186 #543
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
[qa] Use in-memory DB for migration checks #186 #543
Conversation
Use an isolated SQLite in-memory database when running the `makemigrations --dry-run` QA check. Fixes openwisp#186
| } | ||
|
|
||
| # Force in-memory DB for QA migration checks | ||
| if os.environ.get("OWQA_USE_IN_MEMORY_DB"): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We'd have to do this in all the openwisp modules right @pandafy? Or else how would we accomplish this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If I may.
I think we can avoid duplicating this in every module by adding a helper in openwisp_utils that checks for env var and returns the in-memory config. This way, modules can simply wrap their DATABASES setting with that helper.
If I'm missing something you or @pandafy can let me know.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@stktyagi wouldn't we have to edit the settings of every test project in each module anyway?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
right the changes would be a little small but we would still need to atleast touch and go through every test settings, this makes me think of maybe using DJANGO_SETTINGS_MODULE to point to a dummy settings module in openwisp-utils which dynamically loads the current module settings into it and then overwrites the DATABASES variable dictionary. This whole process can be skipped either at the start or during variable overwriting using OWQA_USE_IN_MEMORY_DB keeping the modules completely untouched.
kind of like a proxy settings module.
what do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That would hardly work because each module has different settings which are required for the module to start, unless we solve #408 first.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nemesifier i may have explained it poorly, what i meant was this proxy wouldn't be a 'replacement' for module settings. Instead, it would use an environment variable (set by the QA tool) to dynamically import * from the module's actual settings.py first (using tests/manage.py we can get where the current settings.py are).
This ensures all mandatory, unique settings are loaded so the module can start. The proxy then only overwrites the DATABASES variable in memory.
i asked chatgpt to write a flow for this:-
QA Tool → Proxy Settings → Imports Real Settings (Module starts successfully) → Swaps Database Variable → Success.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It could work, if anyone wants to try to come up with a proof of concept we can evaluate whether the approach is really feasible
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use an isolated SQLite in-memory database when running the
makemigrations --dry-runQA check.Fixes #186
Checklist
Reference to Existing Issue
Closes #186.
Description of Changes
This PR updates the QA
makemigrations --dry-runbehavior to use anisolated in-memory SQLite database instead of the default project
database. This avoids inconsistencies caused by local migration
history and ensures that migration checks run deterministically
regardless of the developer environment.
OWQA_USE_IN_MEMORY_DBis enabled.