Project

General

Profile

Actions

Demande #6423

closed

Demande #6409: Migrer l'infra en Bookworm

Migrer agir sur Bookworm

Added by Pierre-Louis Bonicoli 7 months ago. Updated 6 months ago.

Status:
Résolu
Priority:
Normale
Category:
-
Target version:
Start date:
Due date:
% Done:

100%

Estimated time:
Difficulté:
2 Facile
Actions #1

Updated by François Poulain 6 months ago

  • Status changed from Nouveau to En cours de traitement

D'après Quentin le paquet redmine a été cassé lors de l'install.

Effectivement le log mentionnait une erreur de migration dans les post install.

J'ai peiné, malgré le soutien d'echarp, pour faire fonctionner Bundle.

Mais en fait ça n'est pas utile. En fouillant ya un bin dans le dossier de redmine et on a un bin/rake qui fonctionne.
(j'ignore pk bundle ne fonctionne pas mais il ne va pas m'être nécessaire tout de suite)

Je rejoue la migration et je rejoue bien l'erreur :

# ./bin/rake db:migrate
== 20190510070108 AddUniqueIdToImportItems: migrating =========================
-- change_table(:import_items)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Duplicate column name 'unique_id'

Lisant le code de la migration et étudiant le schéma de la db, je me convainc que, pour une raison incomprise, la colonne unique_id est en trop. La table étant vide de données, je dégage la colonne :

MariaDB [redmine]> ALTER TABLE import_items DROP unique_id;

Je rejoue la migration. J'ai une nouvelle erreur sur la même migration :

== 20190510070108 AddUniqueIdToImportItems: migrating =========================
-- change_table(:import_items)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Index column size too large. The maximum column size is 767 bytes

Après recherche je tombe sur la recommandation de passer le InnoDB Row Formats à « Dynamic ». Je lis la doc et ça semble raisonnable. J'essaie pour la table :

MariaDB [redmine]> ALTER TABLE import_items DROP unique_id;

MariaDB [redmine]> ALTER TABLE import_items ROW_FORMAT=DYNAMIC;

Puis je rejoue les migrations :

(April) root@agir:/usr/share/redmine# ./bin/rake db:migrate
== 20190510070108 AddUniqueIdToImportItems: migrating =========================
-- change_table(:import_items)
   -> 0.3159s
== 20190510070108 AddUniqueIdToImportItems: migrated (0.3161s) ================

== 20190620135549 ChangeRolesNameLimit: migrating =============================
-- change_column(:roles, :name, :string, {:limit=>255, :default=>""})
   -> 0.1822s
== 20190620135549 ChangeRolesNameLimit: migrated (0.1825s) ====================

== 20200826153401 AddTwofaSchemeToUser: migrating =============================
-- add_column(:users, :twofa_scheme, :string)
   -> 0.6474s
== 20200826153401 AddTwofaSchemeToUser: migrated (0.6477s) ====================

== 20200826153402 AddTotpToUser: migrating ====================================
-- add_column(:users, :twofa_totp_key, :string)
   -> 0.3743s
-- add_column(:users, :twofa_totp_last_used_at, :integer)
   -> 0.1999s
== 20200826153402 AddTotpToUser: migrated (0.5745s) ===========================

== 20210704125704 AddTwofaRequiredToGroups: migrating =========================
-- add_column(:users, :twofa_required, :boolean, {:default=>false})
   -> 0.2392s
== 20210704125704 AddTwofaRequiredToGroups: migrated (0.2393s) ================

== 20210705111300 AddProjectsDefaultIssueQueryId: migrating ===================
-- add_column(:projects, :default_issue_query_id, :integer, {:default=>nil})
   -> 0.3391s
== 20210705111300 AddProjectsDefaultIssueQueryId: migrated (0.3392s) ==========

== 20210728131544 DropIsInChlogColumn: migrating ==============================
-- remove_column(:trackers, :is_in_chlog)
   -> 0.7883s
== 20210728131544 DropIsInChlogColumn: migrated (0.7884s) =====================

== 20210801145548 RemoveBccRecipientsSetting: migrating =======================
== 20210801145548 RemoveBccRecipientsSetting: migrated (0.0243s) ==============

== 20210801211024 RemoveOrphanedUserCustomValues: migrating ===================
== 20210801211024 RemoveOrphanedUserCustomValues: migrated (0.0039s) ==========

== 20211213122100 RemoveIdentityUrlFromUsers: migrating =======================
-- remove_column(:users, :identity_url, :string)
   -> 0.1954s
== 20211213122100 RemoveIdentityUrlFromUsers: migrated (0.1955s) ==============

== 20211213122101 DropOpenIdAuthenticationTables: migrating ===================
-- drop_table(:open_id_authentication_associations)
   -> 0.1182s
-- drop_table(:open_id_authentication_nonces)
   -> 0.1070s
== 20211213122101 DropOpenIdAuthenticationTables: migrated (0.2254s) ==========

== 20211213122102 RemoveOpenIdSetting: migrating ==============================
== 20211213122102 RemoveOpenIdSetting: migrated (0.0077s) =====================

== 20220224194639 DeleteOrphanedTimeEntryActivities: migrating ================
== 20220224194639 DeleteOrphanedTimeEntryActivities: migrated (0.0469s) =======

Youpi.

D'après https://mariadb.com/kb/en/innodb-system-variables/#innodb_default_row_format dynamic devrait être le format par défaut. Hors la plupart des tables sont au format compact. C'est probablement lié à l'âge vénérable de notre Redmine, qui aura connu du pg, du my, et du mariadb.

Suggestion: migrer toutes les tables en dynamic pour éviter les futurs soucis de même nature.

Actions #2

Updated by Quentin Gibeaux 6 months ago

  • % Done changed from 0 to 90
Actions #3

Updated by François Poulain 6 months ago

Ça ne concerne que les tables Redmine, d'ailleurs.

MariaDB [(none)]> SELECT TABLE_NAME FROM information_schema.tables where ROW_FORMAT != "Dynamic" and TABLE_SCHEMA = "redmine";
+---------------------------+
| TABLE_NAME                |
+---------------------------+
| groups_users              |
| projects_trackers         |
| user_preferences_VIDE     |
| trackers                  |
| issue_statuses            |
| journal_details           |
| custom_fields             |
| wiki_contents_VIDE        |
| custom_fields_roles       |
| members                   |
| schema_migrations         |
| changesets_issues         |
| permissions_roles         |
| permissions               |
| versions                  |
| documents                 |
| messages                  |
| watchers                  |
| wiki_content_versions     |
| email_addresses           |
| member_roles              |
| custom_fields_trackers    |
| auth_sources              |
| workflows                 |
| wiki_redirects            |
| user_preferences          |
| repositories              |
| news                      |
| custom_values             |
| wiki_pages                |
| boards                    |
| wikis_VIDE                |
| tokens                    |
| issue_categories          |
| roles_managed_roles       |
| enabled_modules           |
| enumerations              |
| wiki_pages_VIDE           |
| wiki_contents             |
| issue_relations           |
| wikis                     |
| changes                   |
| journals                  |
| custom_fields_projects    |
| queries                   |
| comments_VIDE             |
| imports                   |
| issues                    |
| roles                     |
| queries_roles             |
| settings                  |
| comments                  |
| changeset_parents         |
| custom_field_enumerations |
+---------------------------+

Je n'ai pas trouvé comment changer ça en masse dans MAriadb, donc je fais avec un oneliner shell :

$ for table in $(mariadb -e 'SELECT TABLE_NAME FROM information_schema.tables where ROW_FORMAT != "Dynamic" and TABLE_SCHEMA = "redmine";' -B | tail -n +2); do mariadb redmine -e "ALTER TABLE $table ROW_FORMAT=DYNAMIC;"; done

Et à la fin :

MariaDB [(none)]> SELECT TABLE_NAME FROM information_schema.tables where ROW_FORMAT != "Dynamic" and TABLE_SCHEMA = "redmine";
Empty set (1.690 sec)

Actions #4

Updated by François Poulain 6 months ago

Je fini la migration de la vm avec apt autoremove, apt clean, une purge et un reboot.

Actions #5

Updated by François Poulain 6 months ago

J'imagine que cette configuration soit être également manquante sur plusieurs autres tables Mariadb dans l'infra.

Actions #6

Updated by François Poulain 6 months ago

  • Status changed from En cours de traitement to Résolu
  • % Done changed from 90 to 100
Actions #7

Updated by Quentin Gibeaux 6 months ago

  • Assignee set to Quentin Gibeaux
Actions

Also available in: Atom PDF