Skip to content

fix: conservar el historial de migraciones de codigo al importar desde SQLite - #11

Merged
BORNIOS merged 1 commit into
mainfrom
release/3.0.4
Oct 17, 2026
Merged

BORNIOS merged 1 commit into
mainfrom
release/3.0.4

Conversation

@BORNIOS

@BORNIOS BORNIOS commented Oct 17, 2026

Copy link
Copy Markdown
Owner

Qué pasaba

Jellyfin registra en __EFMigrationsHistory tanto sus rutinas de código como las migraciones del proveedor, y todas comparten la forma yyyyMMddHHmmss_nombre. El plugin no llevaba el historial de rutinas al importar desde SQLite, así que Jellyfin las volvía a ejecutar al arrancar. Las rutinas antiguas como RemoveDuplicateExtras abren library.db, que en una instalación nueva de 12.x ya no existe, y el arranque fallaba con no such table: TypedBaseItems.

Detalle del reporte original que conviene aclarar: "yyyyMMddHHmmsss" en .NET produce 14 dígitos, no 15, así que el filtro anterior (id[15] == '_') nunca coincidía. Aceptar 14 dígitos tampoco habría servido: los ids de las migraciones de esquema del proveedor también tienen 14, y habrían entrado al historial de PostgreSQL como si estuvieran aplicadas.

Qué cambia

  • Se copian del historial de SQLite solo los ids que corresponden a un tipo con JellyfinMigrationAttribute, identificados por el nombre de la migración (RemoveDuplicateExtras, MigrateActivityLogDb, …), no por el formato del id.
  • Si no se descubre ningún tipo de migración, no se toca el historial y queda registrado en el log; si no se copia ninguna, se advierte que Jellyfin podría volver a ejecutar rutinas que necesitan library.db.
  • Se elimina el filtro muerto basado en 15 dígitos.

Pruebas

  • 6 unitarias del identificador: acepta rutinas conocidas, rechaza migraciones de esquema y nombres desconocidos.
  • 2 de integración: se copia la rutina aplicada con su ProductVersion y no una migración de esquema; sin tipos descubiertos el historial queda intacto.
  • Suite completa contra PostgreSQL 17: 126 correctas, 0 fallidas, 1 omitida.

Fixes #9

…e SQLite

Jellyfin guarda en __EFMigrationsHistory tanto sus rutinas de codigo como las migraciones del proveedor, y ambos ids comparten la forma yyyyMMddHHmmss_nombre, asi que no se pueden distinguir por formato. Sin ese historial, Jellyfin vuelve a ejecutar rutinas antiguas que esperan library.db y el arranque falla con 'no such table: TypedBaseItems'.

Ahora se copian solo los ids que corresponden a un tipo con JellyfinMigrationAttribute, identificados por el nombre de la migracion.
@BORNIOS BORNIOS self-assigned this Oct 17, 2026
@BORNIOS
BORNIOS merged commit 399dcf9 into main Oct 17, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SQLite→PostgreSQL migration drops applied code-migration history; Jellyfin 12.1 fails with 'no such table: TypedBaseItems'

1 participant