apache / apache/cloudstack

VM Backup usage billed at last-reported size for the entire billing period

Aperta
#13,070 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
component:backup component:usage-server
Lingua principale
Java
Stelle
3.1k
Fork
1.4k
Merge medio
6g 19h
PR unite (30g)
32

Descrizione

### problem

When `EVENT_VM_BACKUP_USAGE_METRIC` events are processed, `Usage Manager` performs an in-place UPDATE of the single usage_backup row for a given (vm_id, backup_offering_id) pair. This means only the most recently received size is retained. When BackupUsageParser runs at billing time, it reads that single row and applies its size to the entire billing window duration, regardless of when the size actually changed.

### versions

ACS 4.20

### The steps to reproduce the bug

The problem is independent of the provider but I am using NAS for testing:
1. Set usage.stats.job.exec.time to `10:00`
2. Assign a backup offering to a VM at `11:00`
3. Create a backup of size 1GB at `11:00`
4. Create a backup of size 99GB at `09:00` the next day
5. Wait for usage job to run and finish at `10:00`

### What to do about it?

**Expected Behavior**
The user should be charged proportionally: ~23 hours at 1 GB + ~1 hours at 100 GB

**Actual Behavior**
The user is charged at 100 GB for the full 24 hours because the last metric event overwrote the size column in-place, erasing all history.

**Fix would be to:**

- Find the active row in `usage_backup` (removed IS NULL) for the (vm_id, backup_offering_id).
- Set its removed = eventDate.
- persist a new UsageBackupVO with the updated size/protectedSize and created = eventDate.
- This matches the existing pattern in UsageNetworksDaoImpl and UsageVpcDaoImpl.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia dall'elaborazione di EVENT_VM_BACKUP_USAGE_METRIC da parte di Usage Manager e traccia il modo in cui BackupUsageParser gestisce le righe usage_backup. Confronta i pattern esistenti in UsageNetworksDaoImpl e UsageVpcDaoImpl, quindi verifica che le modifiche delle dimensioni creino intervalli storici, in modo che la fatturazione addebiti ogni dimensione solo per il periodo in cui è stata attiva.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java
Ambito
backend, cloud
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Tranquilla
Chiarezza
Specificata chiaramente
Idoneità per principianti
72/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.