MusicBrainz is announcing a new schema change release for May 15, 2023. The actual schema (database) changes we’ve detailed below shouldn’t have much perceivable impact on mirror servers, especially if you only use the web service; most are to remove unused tables/columns or tweak how certain tables are materialized.
Continue reading “Schema change release: May 15, 2023”Author: mwiencek
Planned downtime for Thursday, February 2, 15:00 UTC
We’ll be performing maintenance on our primary database starting at 15:00 UTC on February 2. It’ll take about 20 minutes to transfer services from our primary database server to our standby, after which normal service will resume. Thanks for your patience during this time.
Steps to fix missing genre and tag data on MusicBrainz mirror servers
If you recently updated your mirror server to the 2022-05-16 schema change release, we’re sorry to say that a bug in our upgrade script caused aggregate genre and tag data (if you had imported any) to be deleted. If you need this data, it can be re-imported from a recent dump, and we’ve written a script to help automate that.
You can safely ignore this post if
- you’re not running a mirror server;
- you’ve never imported the derived data dump or don’t make use of genre or tag data;
- you’ve already done a full re-import of your database after the schema change release.
To restore the genre and tag data, follow these steps:
- Ensure you’ve replicated up to the most recent replication packet available. If you’re not sure, run
./admin/replication/LoadReplicationChanges. If you’re up-to-date, it should log “Replication packet … is not available.” - Run
git checkout production && git pull origin production. - Turn off any cron jobs that update the database, including for replication.
- Run
./admin/sql/updates/20220720-mbs-12508.sh. - Restart any cron jobs that you disabled.
You can verify that this process worked by checking the number of tags in the database: echo 'SELECT count(*) FROM tag' | ./admin/psql READWRITE. It should be over 200,000.
Sorry for the inconvenience, and let us know if you encounter any further issues.
Planned downtime for Thursday, April 14, 16:00 UTC
We’ll be taking all services down tomorrow, April 14, at 16:00 UTC (11 am CDT, 9 am PDT, 6 pm CEST) in order to reboot our primary database server. Downtime should be 10-15 minutes in duration. As usual, thanks for your patience!
Planned downtime for Wednesday, March 29, 16:00 UTC
We’ll be resuming maintenance on our database servers starting tomorrow, March 29, at 16:00 UTC. Like the previous downtime on March 2, we’ll need about 15 minutes to transfer services from our primary database server to our standby. Thanks again for your patience.
Schema change release: May 16, 2022
Today we’re announcing a MusicBrainz database schema change release planned for May 16, 2022. The majority of these changes follow the theme of improving data integrity and consistency, performance, or just cleaning up old cruft. Others relate to new features for genres and artist credits. We’re also introducing a new entity based on tags, like genres that came before it: Mood. See below for more details, including information on how these changes affect the schema or existing data. We expect people will encounter zero breaking changes, but it doesn’t hurt to double check, especially if you have a specific or non-standard use of the database!
Here’s our list of tickets for the Spring 2022 schema change:
Continue reading “Schema change release: May 16, 2022”Planned downtime for Wednesday, March 2, 16:00 UTC
We’ll be performing some critical maintenance on our database server starting at 16:00 UTC on March 2. Some brief downtime (hopefully less than 15 minutes) will be required to transfer services from our primary database server to our standby, which will allow us to upgrade the primary’s system and perform hardware checks. Thanks for your patience during this time.
MusicBrainz Server update, 2021-09-06
Today we’re happy to release yyoung’s work to improve the external links editor; see his detailed blog post for more information. Thanks for your hard work, yyoung!
This release also contains quite a few bug fixes and improvements, given the amount of time since last release. Several fix guess-case issues, and we’ve refactored the guess-case code to be more maintainable in the future. A visible improvement you may notice is that we now display icons next to entity links in relationships to help distinguish different types of entities. (If you’ve been editing on MusicBrainz for a long time, you may remember something similar from the classic, pre-NGS website.)
A new release of MusicBrainz Docker is also available that matches this update of MusicBrainz Server. See the release notes for update instructions.
Thanks to aerozol, angriestchair, Beckfield, bsammon, chaban, CyberSkull, danBLOO, Dibou, Freso, HDS, jesus2099, KRSCuan, mr_maxis, mtrolley, navap, salo.rock, Shepard, yindesu, and yyoung for having reported bugs and suggested improvements. Thanks to Besnik, ffff23, kellnerd, mfmeulenbelt, panos, salo.rock, th1rtyf0ur, V6lur, and yoshi818 for updating the translations. And thanks to all others who tested the beta version!
The git tag is v-2021-09-06.
Fixed Bug
- [MBS-11793] – Wikipedia abstract is fetched even though URL is ended
- [MBS-11795] – Text overflow in external link relationship type description tooltip
- [MBS-11802] – ISE on “Edit relationship type” edit for removed type
- [MBS-11806] – Relationships for different tracks are wrongly grouped on release bottom credit display
- [MBS-11812] – Merge queue: Missing whitespace before “New disc title”
- [MBS-11832] – artist-credit/id page gives TypeError if the id does not exist
- [MBS-11854] – Guess Case doesn’t properly capitalize after Unicode hyphen U+2010
- [MBS-11861] – Weird odd/even classes client-side for tablesorted statistics
- [MBS-11864] – Some DNB links are wrongly marked as invalid
- [MBS-11922] – pre-NGS release type not shown for compilation
- [MBS-11933] – /oauth2/token doesn’t validate the code parameter
Improvement
- [MBS-2221] – Description for how to set a relationship as “in” a date
- [MBS-2418] – Show “Edit URL” edits in entity edit histories
- [MBS-2421] – Small icon near recording / work / release / artist / … names to distinguish them
- [MBS-3774] – Add URL relationship with begin and end dates
- [MBS-7859] – Hide relationships from original recordings to other/derived versions in release view
- [MBS-10054] – Better editing/viewing of URL relationships from Artist page
- [MBS-10910] – Display renamed labels on Overview
- [MBS-11267] – Show label for cover art pieces when reordering cover art
- [MBS-11391] – Show changes made to external link when editing URL relationship
- [MBS-11622] – Clean up Apple Music label URLs
- [MBS-11650] – Add Tag statistics to profile page
- [MBS-11680] – Group editing URL relationships by external link
- [MBS-11693] – Give useful message when rejecting Musixmatch /album links
- [MBS-11722] – Don’t preselect basic as language proficiency
- [MBS-11732] – Remove LYRICSnMUSIC from lyrics whitelist
- [MBS-11733] – Remove WikiaParoles from lyrics whitelist
- [MBS-11788] – Guess case: Lowercase “official” in ETI
- [MBS-11796] – Add Internet Archive logo for sidebar
- [MBS-11797] – Guess case: Lowercase “censored”, “uncensored”, “explicit” in ETI
- [MBS-11798] – Disallow Instagram /accounts link and other internal links
- [MBS-11808] – Don’t show entities in tag pages where vote count for tag is lower than 1
- [MBS-11810] – Merge queue: Rename “disc title” to “medium title”
- [MBS-11811] – Make Tracklist editing buttons behave consistently on collapsed mediums
- [MBS-11823] – Don’t insert line breaks inside tag words
- [MBS-11824] – featured artist reports should look for featured artists without a space
- [MBS-11825] – Use consistent order for art types when editing vs adding cover art
- [MBS-11833] – Drop “f.” from the featured artists reports
- [MBS-11846] – Display release artist on release group view
- [MBS-11850] – Make footer links more visible
- [MBS-11862] – Do not show deprecated relationship types with 0 uses in selectors
- [MBS-11863] – Allow DNB links for works
- [MBS-11875] – Braille should not be looked for in “Releases with unlikely language/script pairs” in connection to a spoken/written language
- [MBS-11888] – Automatically set/disable ended when setting an end date in DateRangeFieldset
- [MBS-11891] – Use HTTPS when linking to Jira
- [MBS-11912] – Also allow Mainly Norfolk as a lyrics source
- [MBS-11913] – Auto-select “stream” additionaly to “download” for Jamendo URLs
- [MBS-11915] – Don’t show area icon if there’s already a flag icon
- [MBS-11924] – Remove redundant tabs/links/info from deleted editor profiles
New Feature
- [MBS-9426] – Interface to remove usernames from blocked list
- [MBS-9902] – Support auto-select/cleanup/validation of more than one relationship type for external links
- [MBS-11689] – Report: pseudo-releases marked as the original tracklist
- [MBS-11828] – Add admin interface for checking whether a username is blocked
- [MBS-11848] – Add report for “Releases with Amazon cover art without any Cover Art Archive images”
React Conversion Task
- [MBS-11834] – Convert Add Release edit to React
- [MBS-11835] – Convert Change Wikidoc edit to React
- [MBS-11836] – Convert Edit Barcodes edit to React
- [MBS-11837] – Convert Edit Release Label edit to React
- [MBS-11838] – Convert Edit Release edit to React
- [MBS-11839] – Convert Remove Relationship Attribute edit to React
- [MBS-11840] – Convert Reorder Mediums edit to React
Other Task
PostgreSQL 12 Upgrade Instructions for MusicBrainz Server
Thanks to everyone for your patience during our downtime today. As promised, here are steps to follow to upgrade your own PG instance to v12. (Confused? See the previous blog post on this subject.)
If you’re already running v12, there are still some instructions you must follow!
For MusicBrainz Docker
If you’re running the new MusicBrainz Docker setup, an upgrade script exists for you to use. See the release notes for specific – hopefully brief – instructions.
For a Manual Setup (INSTALL.md Based)
If you aren’t using Docker but rather set up musicbrainz-server by hand following INSTALL.md, see the steps below.
Know that as an alternative, you can always import new data dumps from scratch (again following the steps in INSTALL.md) into a new PG 12 cluster. Just make sure you’re on the v-2020-05-18-postgres12 tag of musicbrainz-server while doing so.
If on the other hand you don’t mind getting your hands a bit dirty, you can use the quicker method below. Like INSTALL.md, this assumes you’re using Ubuntu/Debian and their postgresql-common cluster management tools.
If you’re already running v12, you should still follow these steps; however, you can skip the ones involving apt-get, pg_dropcluster, and pg_upgradecluster. The main steps you need to follow in this case are running the 20200518-pg12-before-upgrade.sql and 20200518-pg12-after-upgrade.sql scripts in that order.
On distros other than Debian/Ubuntu where the postgresql-common tools aren’t available, you’ll have to manage with initdb and pg_upgrade on your own.
- First take down the web server running MusicBrainz (stop plackup) to prevent database access.
- Turn off any cron jobs updating or accessing the database (e.g. for the live data feed/replication packets).
- Switch to the latest musicbrainz-server code with:
git fetch origin && \
git checkout v-2020-05-18-postgres12 - With PG 9.5 (or whatever version you’re using) still running, run the following “pre-upgrade” script:
psql -U postgres -d musicbrainz_db \
-f admin/sql/updates/20200518-pg12-before-upgrade.sqlThis assumes that “postgres” is the name of your PG superuser, and “musicbrainz_db” is the name of your database. If you see a few messages about things not existing, that’s normal.
- Install packages for PostgreSQL 12. On Ubuntu/Debian you can obtain them from the PGDG apt repo.
apt-get update && \
apt-get install postgresql-12 postgresql-server-dev-12If you’re installing postgresql-12 for the first time, this will automatically create a new cluster at /var/lib/postgresql/12/main. Remove that empty cluster. Don’t run this if you already had v12 installed and have data there!
pg_dropcluster --stop 12 main
If you did already have v12 installed withmusicbrainz_dbrunning there, leave the cluster alone and skip the next step involvingpg_upgradecluster.In the unlikely event that you already have a v12 cluster, but also have
musicbrainz_dbrunning in a separate, older cluster, these instructions won’t work for you. We recommend importing fresh data dumps into the v12 cluster and dropping the old one. - Upgrade the old cluster. This assumes it’s version 9.5; if you’re using version 10 or 11, make sure to replace
9.5below with 10 or 11. If you have other databases in your old cluster besidesmusicbrainz_db, be aware that this will upgrade all of them to PG 12.pg_upgradecluster -v 12 9.5 main
- If all goes well, the new cluster should be up and running. (You can drop the old one if you like; the output of the
pg_upgradeclustercommand will tell you how.) Now run the following “post-upgrade” script on the database:psql -U postgres -d musicbrainz_db -f \
This may take a bit, as it has to recreate some indexes.
admin/sql/updates/20200518-pg12-after-upgrade.sql - The upgrade is complete. You can turn cron jobs back on, if applicable.
- Restart the MusicBrainz web server / plackup, if applicable. If you’re accessing the server in a web browser, the usual release upgrade steps apply, like running
./script/compile_resources.shagain.
If you run into any trouble following the above, please let us know and we’ll try to help resolve your issue as soon as possible!
Reminder: Upgrading to PostgreSQL 12 on May 18, 2020
As we announced in February, in two weeks time (May 18, 2020) we’ll be upgrading our production database server to PostgreSQL v12 (from v9.5). At the same time, v12 will become the minimum supported version for MusicBrainz Server, so we ask that you upgrade afterwards as soon as possible! If you’re still unsure, a Q&A is below.
When do I need to upgrade my postgres by?
As soon as possible after May 18 if you’d like to keep your musicbrainz-server code up to date.
How do I perform the upgrade?
We’ll provide instructions closer to May 18. It’s recommended that you don’t upgrade until then, since we’ll be providing scripts to resolve some issues.
Will the live data feed (replication packets) stop working right away if I don’t upgrade?
No, as long as you keep your musicbrainz-server code checkout on the v-2020-05-11 tag (which will be the final release before May 18) or earlier. Future releases may work for a while too.
This is not a schema change release, so replication will continue to work smoothly until you upgrade. No tables or views will change.
However, to make the upgrade process smoother we’ll be dropping the musicbrainz-collate and musicbrainz-unaccent extensions, instead using PG’s builtin collation support for the former and replacing the latter with the unaccent extension from postgresql-contrib. A few SQL functions are being added to enable this, and some indexes need to be rebuilt. This will all happen as part of upgrade scripts we provide (or you can import from scratch). Some features of musicbrainz-server that use these old extensions may cease to work if you don’t apply them.
The extension changes above don’t actually make use of any new PG 12 features. We’ll avoid using such features for at least 1 month.
If I’m already running PostgreSQL 12, do I need to do anything?
Yes, but things will be easier for you. As mentioned in the previous answer, we’ll be dropping the musicbrainz-collate and musicbrainz-unaccent extensions to make the upgrade process smoother for pre-v12 instances. So you’ll only have to run some upgrade scripts we provide to replace those extensions and rebuild some indexes.
My host/distribution doesn’t have PostgreSQL 12 yet!
If you’re running Debian or Ubuntu, the PGDG maintains an APT repository with the latest versions. These are the same packages MetaBrainz uses in production.
Amazon RDS supports PostgreSQL 12 since March 31.
I absolutely cannot upgrade yet! What should I do?
You can stay on the v-2020-05-11 release of musicbrainz-server or earlier until then. Replication packets (i.e. the live data feed) will continue to work until the next schema change on that tag, but you’ll have upgraded to v12 by then, right?
Instead of performing a pg_upgrade and running these upgrade scripts you mentioned, can I just import fresh data dumps into a new v12 cluster?
Of course. Just make sure your musicbrainz-server git checkout is on the v-2020-05-18 tag (once that’s released) or later before performing the import. And keep in mind it may be slower than a direct upgrade.