Skip to content

UI: allow memory setting in flex compute offering in GiB with unit selector (#14082) - #14413

Open
saurabhkushwaha438 wants to merge 1 commit into
apache:mainfrom
saurabhkushwaha438:issue-14082-flex-memory-gib
Open

saurabhkushwaha438 wants to merge 1 commit into
apache:mainfrom
saurabhkushwaha438:issue-14082-flex-memory-gib

Conversation

@saurabhkushwaha438

Copy link
Copy Markdown
Contributor

Description

Fixes #14082

1. Conversion from MiB to GiB (Display & Rounding)

  • Binary conversion is used (1 GiB = 1024 MiB).
  • When offerings with predefined constraints or initial values are loaded in MiB, or when switching from MiB to GiB:
    $$\text{displayValue} = \text{parseFloat}\left(\left(\frac{\text{rawMemory}}{1024}\right)\text{.toFixed(2)}\right)$$
  • The display value is rounded to 2 decimal places to keep the UI clean, readable, and intuitive for users.
  • Slider step dynamically adjusts:
    • In GiB mode: step is set to 0.01 (or smaller for sub-GiB offerings) with precision 2.
    • In MiB mode: step is set to 1 with integer precision 0.

2. Conversion from GiB to MiB (Backend Value Emission)

  • CloudStack APIs and backend services expect memory allocations in integer MiB.
  • When the user selects or inputs memory in GiB:
    $$\text{memoryInMiB} = \text{Math.round}(\text{displayValue} \times 1024)$$
  • Exact Boundary Protection: If a compute offering has minimum/maximum memory constraints (minMemory / maxMemory), selecting the exact minimum or maximum bound in GiB directly maps to the exact integer minMemory or maxMemory in MiB to eliminate any potential off-by-one rounding discrepancies.

💬 Feedback Needed: Fractional GiB to Integer MiB Rounding

  • Observation: Converting decimal GiB values to MiB often produces fractional values (e.g., 1.51 GiB × 1024 = 1546.24 MiB).
  • Current Behavior: The UI rounds this to the nearest integer (1546 MiB), which is then emitted in the API payload and consumed by backend hypervisor managers.
  • Reviewer Input: Looking for maintainer feedback on whether standard nearest-integer rounding (Math.round) is acceptable, or if we should apply ceiling (Math.ceil) to guarantee the VM always receives at least the requested GiB amount.
bandicam.2026-10-16.10-21-12-210.mp4

@codecov

codecov Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 20.76%. Comparing base (7ed0cec) to head (c401af2).
⚠️ Report is 82 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff              @@
##               main   #14413      +/-   ##
============================================
+ Coverage     19.91%   20.76%   +0.84%     
- Complexity    20198    21905    +1707     
============================================
  Files          6373     6496     +123     
  Lines        577230   591644   +14414     
  Branches      70696    72601    +1905     
============================================
+ Hits         114936   122835    +7899     
- Misses       449736   455471    +5735     
- Partials      12558    13338     +780     
Flag Coverage Δ
uitests 3.87% <ø> (+0.16%) ⬆️
unittests 22.07% <ø> (+0.88%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@nvazquez nvazquez added this to the 24.0 milestone Oct 30, 2026
@nvazquez

Copy link
Copy Markdown
Contributor

@blueorangutan ui

@blueorangutan

Copy link
Copy Markdown

@nvazquez a Jenkins job has been kicked to build UI QA env. I'll keep you posted as I make progress.

@blueorangutan

Copy link
Copy Markdown

UI build: ✔️
Live QA URL: https://qa.cloudstack.cloud/simulator/pr/14413 (QA-JID-1003)

@saurabhkushwaha438
saurabhkushwaha438 force-pushed the issue-14082-flex-memory-gib branch from db7c8a0 to 2c7e3a6 Compare October 30, 2026 06:33
…B step (apache#14082)

- Add compact unit selector dropdown (GiB/MiB) for flex compute offerings
- Use fixed 0.25 GiB steps in GiB mode (binary-exact to 256 MiB intervals, zero rounding errors)
- Maintain integer MiB as authoritative internal state to prevent lossy conversion on load
- Default to GiB for 256 MiB multiples and MiB for arbitrary sizes (e.g. 1500 MiB)
- Add hover tooltip to display exact converted values
@saurabhkushwaha438
saurabhkushwaha438 force-pushed the issue-14082-flex-memory-gib branch from 2c7e3a6 to c401af2 Compare October 30, 2026 06:42
updateComputeMemory (displayValue) {
if (displayValue === null || displayValue === undefined) {
this.memoryDisplayValue = 0
displayValue = 0

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@saurabhkushwaha438 can we keep the required error when the box is cleared? on an offering with no limits this now sends 0 instead.

@Damans227

Copy link
Copy Markdown
Collaborator

@blueorangutan ui

@blueorangutan

Copy link
Copy Markdown

@Damans227 a Jenkins job has been kicked to build UI QA env. I'll keep you posted as I make progress.

@blueorangutan

Copy link
Copy Markdown

UI build: ✔️
Live QA URL: https://qa.cloudstack.cloud/simulator/pr/14413 (QA-JID-1004)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

UI: Please change memory setting in flex compute offering from MiB to GiB

5 participants