[Bug][Migration] modify refs id length fails on MySQL Group Replication and leaves refs without a primary key
Maintainer antworten meist innerhalb von 2 Tagen
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 68/100
Rechercherichtung
Start with migration 20240124155129 and trace its call to migrationhelper.ChangePrimaryKeyColumnsType; the issue identifies this helper as used only by this migration. Check the migration’s behavior on MySQL with Group Replication, where DML on a table without a primary key fails. Done means the migration succeeds and refs retains its primary key throughout.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Search before asking
- I had searched in the issues and found no similar issues.
What happened
On a fresh database, migration 20240124155129 ("modify refs id length from 255 to 500") fails on MySQL with Group Replication. DevLake doesn't start.
The migration calls migrationhelper.ChangePrimaryKeyColumnsType. On MySQL that function:
- runs
ALTER TABLE refs DROP PRIMARY KEY; - renames
idto a temp column, adds a newidcolumn, and copies data withUPDATE refs SET id = <tmp> ...; - runs
ALTER TABLE refs ADD PRIMARY KEY (id).
Group Replication requires every replicated table to have a primary key or an equivalent non-null unique key (https://dev.mysql.com/doc/refman/8.0/en/group-replication-requirements.html). It rejects DML on tables without one, so step 2 fails even on an empty table:
[migrator] applying migration script modify refs id length from 255 to 500:20240124155129
dalgorm.go:286 Error 3098 (HY000): The table does not comply with the requirements by an external plugin.
[rows:0] UPDATE `refs` SET `id`= `id_5F25450158E7FFB26E242E4DA0AE9F41` ,`updated_at`='...' WHERE `id_5F25450158E7FFB26E242E4DA0AE9F41` IS NOT NULL
panic: Error 3098 (HY000): The table does not comply with the requirements by an external plugin. (500)
Step 3 never runs. The rollback in ChangeColumnsType restores the id column but not the primary key, so refs stays without one. The next start fails on the same migration, now at step 1:
panic: Error 1091 (42000): Can't DROP 'PRIMARY'; check that column/key exists (500)
What do you expect to happen
The migration succeeds on MySQL with Group Replication, and refs keeps its primary key the whole time. Group Replication is what MySQL InnoDB Cluster runs on, so DevLake can't use an HA MySQL setup while this migration drops the key before copying data.
How to reproduce
-
Start a single-node MySQL 8.0 with Group Replication:
cat > gr.cnf <<'EOF' [mysqld] server_id=1 gtid_mode=ON enforce_gtid_consistency=ON plugin_load_add=group_replication.so loose-group_replication_group_name=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee loose-group_replication_start_on_boot=OFF loose-group_replication_local_address=127.0.0.1:33061 loose-group_replication_group_seeds=127.0.0.1:33061 EOF docker run -d --name devlake-gr -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=lake \ -e MYSQL_USER=merico -e MYSQL_PASSWORD=merico \ -v "$PWD/gr.cnf:/etc/mysql/conf.d/gr.cnf:ro" mysql:8.0 docker exec devlake-gr mysql -uroot -proot -e "SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;" -
Start DevLake with
DB_URL=mysql://merico:[email protected]:3307/lake?charset=utf8mb4&parseTime=True&loc=UTCandFORCE_MIGRATION=true. -
DevLake panics on migration
20240124155129with error 3098. -
SHOW CREATE TABLE refsshows no primary key. Starting DevLake again panics with error 1091.
Anything else
It happens every time on a fresh database. On plain MySQL without Group Replication the migration passes.
Related: #6451 (Group Replication, missing primary keys on other tables; closed as stale), #6292 (same drop-then-re-add pattern failing on Azure MySQL with GIPK). Neither covers the refs migration.
Widening a varchar primary key doesn't need the drop/copy/re-add sequence. On MySQL, ALTER TABLE refs MODIFY id varchar(500) keeps the key and the data. ChangePrimaryKeyColumnsType is only used by this migration.
Version
02dab0cda304298a2a47737ada4a616921b7c914 (current main); also seen on b3f18854ad58b5cf0e9a56c14266af17ae19894f
Are you willing to submit PR?
- Yes I am willing to submit a PR!
Code of Conduct
- I agree to follow this project's Code of Conduct
- Vorherrschende Sprache
- Go
- Sterne
- 3.2k
- Forks
- 832
- Ø Merge
- 1 T. 22 Std.
- Gemergte PRs (30 T.)
- 75
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus apache/devlake
-
[Bug][linker] LinkPrToIssue never matches lowercase issue keys (e.g. in branch names)Evtl. vergeben @VictorColomb hat das vor 1 Tag übernommen. Offentype/bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
apache/devlake#9283 · 1 Kommentar · 1 Reaktion · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 60/100
Maintainer antworten meist innerhalb von 2 Tagen
-
[Bug][Tempo] Team pagination relies on metadata.total, which Tempo v4 doesn't return: only the first 50 teams are listed/collectedEvtl. vergeben @ShivamSharma43 hat das heute übernommen. Offen
Schwierigkeit 3/5 Ein halber Tag Anfängerfreundlichkeit 25/100
Maintainer antworten meist innerhalb von 2 Tagen
-
[Refactor][CircleCI] Make extractJobs and extractWorkflows incremental with NewStatefulApiExtractorEvtl. vergeben @zahorniak hat das heute übernommen. Offen
apache/devlake#9305 · 1 Reaktion · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
[Bug][CircleCI] collectJobs and collectWorkflows collect on_hold workflows again on every run, so the raw tables grow without a limitEvtl. vergeben @zahorniak hat das heute übernommen. Offen
apache/devlake#9304 · 1 Reaktion · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
limitlessprojects/Go-Hybrid#3342 ·
Maintainer antworten meist innerhalb von 1 Tag
-
status/ready type/bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
buildpacks/pack#2733 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
-
kind/bug needs-priority needs-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
konveyor/tackle2-hub#1166 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 4 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
router-for-me/CLIProxyAPI#7209 ·
Maintainer antworten meist innerhalb von 1 Tag