Improve sandboxing of broken extensions.

Review Request #10959 — Created March 17, 2020 and submitted

Information

Djblets
release-1.0.x

Reviewers

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
Improve sandboxing of broken extensions.
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. 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.
9ad0c400b007a1b141b8bee25c2a6788563994f3
Description From Last Updated

F821 undefined name 'ext_class'

reviewbotreviewbot
Checks run (1 failed, 1 succeeded)
flake8 failed.
JSHint passed.

flake8

chipx86
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-1.0.x (b72591b)