Skip to content

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

@abh1sar

Description

@abh1sar

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions