2.0 KiB
2.0 KiB
Pool Refresh Fix
Issue
UI tidak terupdate setelah klik tombol "Refresh Pools", meskipun pool ada di database dan sistem.
Root Cause
Masalahnya ada di backend - field created_by di database bisa null, tapi di struct ZFSPool adalah string (bukan pointer atau sql.NullString). Saat scan, jika created_by null, scan akan gagal dan pool di-skip.
Solution
Menggunakan sql.NullString untuk scan created_by, lalu assign ke string jika valid.
Changes Made
Updated backend/internal/storage/zfs.go
File: backend/internal/storage/zfs.go (line 425-442)
Before:
var pool ZFSPool
var description sql.NullString
err := rows.Scan(
&pool.ID, &pool.Name, &description, &pool.RaidLevel, pq.Array(&pool.Disks),
&pool.SizeBytes, &pool.UsedBytes, &pool.Compression, &pool.Deduplication,
&pool.AutoExpand, &pool.ScrubInterval, &pool.IsActive, &pool.HealthStatus,
&pool.CreatedAt, &pool.UpdatedAt, &pool.CreatedBy, // Direct scan to string
)
After:
var pool ZFSPool
var description sql.NullString
var createdBy sql.NullString
err := rows.Scan(
&pool.ID, &pool.Name, &description, &pool.RaidLevel, pq.Array(&pool.Disks),
&pool.SizeBytes, &pool.UsedBytes, &pool.Compression, &pool.Deduplication,
&pool.AutoExpand, &pool.ScrubInterval, &pool.IsActive, &pool.HealthStatus,
&pool.CreatedAt, &pool.UpdatedAt, &createdBy, // Scan to NullString
)
if err != nil {
s.logger.Error("Failed to scan pool row", "error", err, "error_type", fmt.Sprintf("%T", err))
continue
}
if createdBy.Valid {
pool.CreatedBy = createdBy.String
}
Testing
- Pool ada di database:
default-pool - Pool ada di sistem ZFS:
zpool listshowsdefault-pool - API sekarang mengembalikan pool dengan benar
- Frontend sudah di-deploy
Status
✅ FIXED - Backend sekarang mengembalikan pools dengan benar
Next Steps
- Refresh browser untuk melihat perubahan
- Klik tombol "Refresh Pools" untuk manual refresh
- Pool seharusnya muncul di UI sekarang
Date
2026-01-09