fix(nfs): add migration 0006 to repair fsid=0 exports

Migration 0005 (MigrateNFSClients) only runs once when first applied,
so any fsid=0 rows present before 0005 was applied never get repaired.

Migration 0006 triggers FixZeroFSIDs() which:
- Queries all nfs_exports rows with fsid=0
- Generates a new random fsid per row
- Updates the row

Version: 0.5.2
This commit is contained in:
2026-07-06 12:10:20 -04:00
parent 35ff23bf71
commit d380cad36d
3 changed files with 44 additions and 1 deletions
+40
View File
@@ -86,6 +86,11 @@ func (d *DB) Migrate() error {
return fmt.Errorf("migrate nfs clients: %w", err)
}
}
if name == "0006_nfs_fix_zero_fsid.sql" {
if err := d.FixZeroFSIDs(); err != nil {
return fmt.Errorf("fix zero fsids: %w", err)
}
}
}
return nil
}
@@ -227,3 +232,38 @@ func (d *DB) MigrateNFSClients() error {
}
return nil
}
func (d *DB) FixZeroFSIDs() error {
rows, err := d.conn.Query(`SELECT id, fsid FROM nfs_exports WHERE fsid = 0`)
if err != nil {
return fmt.Errorf("query zero fsid exports: %w", err)
}
defer rows.Close()
type fsidRow struct {
ID int64
FSID int64
}
var toFix []fsidRow
for rows.Next() {
var r fsidRow
if err := rows.Scan(&r.ID, &r.FSID); err != nil {
return fmt.Errorf("scan fsid row: %w", err)
}
toFix = append(toFix, r)
}
if err := rows.Err(); err != nil {
return fmt.Errorf("rows iteration: %w", err)
}
for _, r := range toFix {
n, err := system.GenerateRandomFSID()
if err != nil {
return fmt.Errorf("generate fsid for id %d: %w", r.ID, err)
}
if _, err := d.conn.Exec(`UPDATE nfs_exports SET fsid = ? WHERE id = ?`, int64(n), r.ID); err != nil {
return fmt.Errorf("update fsid for id %d: %w", r.ID, err)
}
}
return nil
}