Improve sandboxing of broken extensions.
Review Request #10959 — Created March 17, 2020 and submitted
When loading extensions, we attempt to catch some common initialization
errors and present them in the extension manager interface, so that
developers or end users have a sense of what's going on. This has worked
fine for extensions involving the initialization of the extenison
itself, but didn't cover issues like syntax errors, issues with the
administration URLs, media installation, or others.This change attempts improve upon this by capturing more failures that
can occur and insulating the rest of the product from those failures,
ensuring we don't, for instance, have stale extension state sitting around.Along with this, it tries bullet-proof signal management for extensions
so a bad handler can't further break things during the enabling or
disabling of an extension.
Hit this on release-2.0.x with some older extensions on Django 1.11,
and with old Python 2 code on Python 3. Verified that various issues
(such as half-loaded extensions, extension state ref count inconsistencies,
and issues re-enabling extensions) weren't hit.Unit tests pass. Note that there are no new unit tests in this change, and
that's partly because the extension test suite was completely redone between
Djblets 1.0 and 2.0. There's some work in the queue on improving tests for
this for 2.0.
Summary | ID |
---|---|
9ad0c400b007a1b141b8bee25c2a6788563994f3 |
Description | From | Last Updated |
---|---|---|
F821 undefined name 'ext_class' |
reviewbot |
- Change Summary:
-
Fixed a bad variable reference in a logging statement when uninitializing an extension.
- Commits:
-
Summary ID bb87bf31ea5367f584a0adc68d19818eb1575bcd 9ad0c400b007a1b141b8bee25c2a6788563994f3 - Diff:
-
Revision 2 (+202 -122)