Don't load or install extensions during a Review Board upgrade.
Review Request #10243 — Created Oct. 19, 2018 and submitted
A customer hit a bug where they had upgraded the Review Board package,
but not the database, and had run a management command that found the
newrbintegrations
package and tried to install it, triggering an
early database upgrade. This was quite problematic, and caused a lot of
confusion while trying to diagnose a separate upgrade problem.To avoid this, and potentially other problems, we no longer load any
extensions if the Review Board version stored in the database does not
match the package version. Instead, extensions will only load if the
version matches. This lets us avoid these early migrations prior to a
database upgrade.The one caveat is that this won't solve the problem if
syncdb
and
evolve
are run in separate sessions (by invokingmanage.py
twice,
for instance).syncdb
will set the new database version, meaning that
evolve
is free to load extensions again. This is only really an issue
during development, sincerb-site upgrade
runs these in the same
session.Part of this will be addressed in some longer-term Django Evolution
work, which will be providing a command similar to modern Django's
migrate
command, where everything can be done all at once.
Shorter-term, an upcoming change will add anupgrade
command to
manage.py
.
Reproduced the original problem by upgrading the Review Board package
and running a management command. Saw that the database upgrade did not
trigger until I explicitly performed it.
Description | From | Last Updated |
---|---|---|
Typo in description: dattabase |
david |
- Description:
-
A customer hit a bug where they had upgraded the Review Board package,
but not the database, and had run a management command that found the new rbintegrations
package and tried to install it, triggering an~ early dattabase upgrade. This was quite problematic, and caused a lot of ~ early database upgrade. This was quite problematic, and caused a lot of confusion while trying to diagnose a separate upgrade problem. To avoid this, and potentially other problems, we no longer load any
extensions if the Review Board version stored in the database does not match the package version. Instead, extensions will only load if the version matches. This lets us avoid these early migrations prior to a database upgrade. The one caveat is that this won't solve the problem if
syncdb
andevolve
are run in separate sessions (by invokingmanage.py
twice,for instance). syncdb
will set the new database version, meaning thatevolve
is free to load extensions again. This is only really an issueduring development, since rb-site upgrade
runs these in the samesession. Part of this will be addressed in some longer-term Django Evolution
work, which will be providing a command similar to modern Django's migrate
command, where everything can be done all at once.Shorter-term, an upcoming change will add an upgrade
command tomanage.py
.