Repository navigation
Conversation
…count copySnapshotOnPool passed CallContext.getCallingUserId() to incrementResourceCount, whose first argument is an account id, not a user id. User ids and account ids are independent sequences, so the primary_storage count was charged to whichever account happened to share the caller's user id (and never to the real owner), corrupting quota accounting. The following guard also compared the calling user id against Account.ACCOUNT_ID_SYSTEM. Use the snapshot owner's account id for the count and the calling account id for the system check.
|
@DaanHoogland Could you pls take a look at this |
DaanHoogland
left a comment
There was a problem hiding this comment.
clgtm, one nit though
The test is in the same package, so the method does not need to be protected.
|
Good point, thank you. Made it package-private in 5a5e884. |
The resource count already goes to the owner, so the usage event should too, otherwise an admin copying a user's snapshot is billed for it. Matches the snapshot create and delete usage events, which also use the owner account.
…ImplTest Keep a single test suite per class. Move copySnapshotOnPoolChargesPrimaryStorageToTheSnapshotOwnerAccount into SnapshotManagerImplTest and drop the separate SnapshotManagerImplCopyResourceCountTest. The case reuses the mocks already declared on the suite, so the duplicate mock declarations and the separate runner are no longer needed.
|
@blueorangutan package |
|
@DaanHoogland a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress. |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #14036 +/- ##
============================================
+ Coverage 3.53% 20.21% +16.68%
- Complexity 0 20750 +20750
============================================
Files 487 6426 +5939
Lines 41863 580181 +538318
Branches 7912 71033 +63121
============================================
+ Hits 1479 117298 +115819
- Misses 40170 450167 +409997
- Partials 214 12716 +12502
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✖️ debian ✔️ suse15. SL-JID 19621 |
Damans227
left a comment
There was a problem hiding this comment.
thanks @rootnomad, fix looks right. LGTM
Description
When a snapshot is copied to an extra primary storage pool (createSnapshot with
storagepoolids), copySnapshotOnPool incremented the primary_storage resource count
using CallContext.getCallingUserId(). That method's first argument is an account
id, but getCallingUserId() returns a user id, and user ids and account ids are
independent sequences. So the usage was charged to whatever account happens to
share the caller's user id, never to the snapshot's real owner, and the delete
path never decrements it. The following guard also compared the user id against
Account.ACCOUNT_ID_SYSTEM.
Charge the snapshot owner's account id, and use the calling account id for the
system check.
Types of changes
Feature/Enhancement Scale or Bug Severity
Bug Severity
How Has This Been Tested?
Added a unit test asserting the primary_storage count is charged to the snapshot
owner's account rather than the calling user id. Also built the standard packages
and deployed on a KVM advanced zone.