server: charge snapshot copy primary storage to the snapshot owner ac… - #14036
Open
nagaboinaramgopal wants to merge 1 commit into
Open
server: charge snapshot copy primary storage to the snapshot owner ac…#14036nagaboinaramgopal wants to merge 1 commit into
nagaboinaramgopal wants to merge 1 commit into
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.