Files
calypso/POOL-REFRESH-FIX.md
2026-01-09 16:54:39 +00:00

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

  1. Pool ada di database: default-pool
  2. Pool ada di sistem ZFS: zpool list shows default-pool
  3. API sekarang mengembalikan pool dengan benar
  4. 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