80 lines
2.3 KiB
Markdown
80 lines
2.3 KiB
Markdown
# Pool Delete Mountpoint Cleanup
|
|
|
|
## Issue
|
|
Ketika pool dihapus, mount point directory tidak dihapus dari sistem. Mount point directory tetap ada di `/opt/calypso/data/pool/<pool-name>` meskipun pool sudah di-destroy.
|
|
|
|
## Root Cause
|
|
Fungsi `DeletePool` tidak melakukan cleanup untuk mount point directory setelah pool di-destroy.
|
|
|
|
## Solution
|
|
Menambahkan kode untuk menghapus mount point directory setelah pool di-destroy.
|
|
|
|
## Changes Made
|
|
|
|
### Updated `backend/internal/storage/zfs.go`
|
|
**File**: `backend/internal/storage/zfs.go` (line 518-562)
|
|
|
|
Menambahkan cleanup untuk mount point directory setelah pool di-destroy:
|
|
|
|
**Before:**
|
|
```go
|
|
// Mark disks as unused
|
|
for _, diskPath := range pool.Disks {
|
|
// ...
|
|
}
|
|
|
|
// Delete from database
|
|
_, err = s.db.ExecContext(ctx, "DELETE FROM zfs_pools WHERE id = $1", poolID)
|
|
// ...
|
|
```
|
|
|
|
**After:**
|
|
```go
|
|
// Remove mount point directory (default: /opt/calypso/data/pool/<pool-name>)
|
|
mountPoint := fmt.Sprintf("/opt/calypso/data/pool/%s", pool.Name)
|
|
if err := os.RemoveAll(mountPoint); err != nil {
|
|
s.logger.Warn("Failed to remove mount point directory", "mountpoint", mountPoint, "error", err)
|
|
// Don't fail pool deletion if mount point removal fails
|
|
} else {
|
|
s.logger.Info("Removed mount point directory", "mountpoint", mountPoint)
|
|
}
|
|
|
|
// Mark disks as unused
|
|
for _, diskPath := range pool.Disks {
|
|
// ...
|
|
}
|
|
|
|
// Delete from database
|
|
_, err = s.db.ExecContext(ctx, "DELETE FROM zfs_pools WHERE id = $1", poolID)
|
|
// ...
|
|
```
|
|
|
|
## Mount Point Location
|
|
Default mount point untuk semua pools adalah:
|
|
```
|
|
/opt/calypso/data/pool/<pool-name>/
|
|
```
|
|
|
|
## Behavior
|
|
1. Pool di-destroy dari ZFS system
|
|
2. Mount point directory dihapus dengan `os.RemoveAll()`
|
|
3. Disks ditandai sebagai unused di database
|
|
4. Pool dihapus dari database
|
|
|
|
## Error Handling
|
|
- Jika mount point removal gagal, hanya log warning
|
|
- Pool deletion tetap berhasil meskipun mount point removal gagal
|
|
- Ini memastikan bahwa pool deletion tidak gagal hanya karena mount point cleanup
|
|
|
|
## Testing
|
|
1. Create pool dengan nama "test-pool"
|
|
2. Verify mount point directory dibuat: `/opt/calypso/data/pool/test-pool/`
|
|
3. Delete pool
|
|
4. Verify mount point directory dihapus: `ls /opt/calypso/data/pool/test-pool` should fail
|
|
|
|
## Status
|
|
✅ **FIXED** - Mount point directory sekarang dihapus saat pool di-delete
|
|
|
|
## Date
|
|
2026-01-09
|