Skip to content

Conversation

@abailly-akamai
Copy link
Contributor

@abailly-akamai abailly-akamai commented Jan 26, 2026

Description 📝

Customers have reported that upon loading Cloud Manager and navigating to the Object Storage page, Cloud Manager shows them the empty state landing page leading the customers to believe that all of their buckets are gone. Upon refreshing the page, the buckets load and appear as expected.

While it is hard to reproduce with the scenario above, one way to detect the bug consistently is to access that page through Cloud Manager auth callback redirect URL by signing out and back in.

🐛 The issue: a race condition with the complex logic to enable the query with our feature flags.

🔧 The fix: await any of the data source

Changes 🔄

  • fix buckets query enabling logic

Scope 🚢

Upon production release, changes in this PR will be visible to:

  • All customers
  • Some customers (e.g. in Beta or Limited Availability)
  • No customers / Not applicable

Preview 📷

Before After
Screen.Recording.2026-01-26.at.13.10.46.mov
Screen.Recording.2026-01-26.at.13.09.06.mov

How to test 🧪

Prerequisites

Any account with a bucket

Reproduction steps

See video "Before"

Verification steps

See video "After"

Author Checklists

As an Author, to speed up the review process, I considered 🤔

👀 Doing a self review
❔ Our contribution guidelines
🤏 Splitting feature into small PRs
➕ Adding a changeset
🧪 Providing/improving test coverage
🔐 Removing all sensitive information from the code and PR description
🚩 Using a feature flag to protect the release
👣 Providing comprehensive reproduction steps
📑 Providing or updating our documentation
🕛 Scheduling a pair reviewing session
📱 Providing mobile support
♿ Providing accessibility support

  • I have read and considered all applicable items listed above.

As an Author, before moving this PR from Draft to Open, I confirmed ✅

  • All tests and CI checks are passing
  • TypeScript compilation succeeded without errors
  • Code passes all linting rules

@abailly-akamai abailly-akamai self-assigned this Jan 26, 2026
@abailly-akamai abailly-akamai marked this pull request as ready for review January 26, 2026 12:21
@abailly-akamai abailly-akamai requested a review from a team as a code owner January 26, 2026 12:21
@abailly-akamai abailly-akamai changed the title fix: [UIE-10094] Buckets query race condition on auth callback fix: [UIE-10094] Buckets query race condition Jan 26, 2026
@abailly-akamai
Copy link
Contributor Author

@cpathipa would appreciate your eyes on the logic since I remember you working on some of this

@bnussman-akamai bnussman-akamai added the Object Storage deals with Object Storage label Jan 26, 2026
((isObjectStorageGen2Enabled && Boolean(endpoints)) ||
(isObjMultiClusterEnabled && Boolean(regions)) ||
Boolean(clusters));
(isObjMultiClusterEnabled &&
Copy link
Contributor

Choose a reason for hiding this comment

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

I see that's working so it might be what was needed, but do we need all of that?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes.. this is the fix and because the logic is a bit complex we need these conditionals to be more more fine grained. Not that I like it, but that's what I came up with, without bigger refactors. Happy yo consider a better solution if you can think of one

Copy link
Contributor

Choose a reason for hiding this comment

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

hmm

I see that regions already handles the condition isObjMultiClusterEnabled && !isObjectStorageGen2Enabled

  const regions =
    isObjMultiClusterEnabled && !isObjectStorageGen2Enabled
      ? allRegions?.filter((r) => r.capabilities.includes('Object Storage'))
      : undefined;

so maybe we can do smth like this:

const queryEnabled =
  enabled &&
  (
    (isObjectStorageGen2Enabled && Boolean(endpoints)) ||
    Boolean(regions) ||
    (!isObjMultiClusterEnabled && !isObjectStorageGen2Enabled && Boolean(clusters))
  );

what do you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This works - it's cleaner I agree. I need to confirm this works well in all cases but this should do it

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I even simplified the logic and just await any of the query. this fixes it

@github-project-automation github-project-automation bot moved this from Review to Approved in Cloud Manager Feb 2, 2026
@linode-gh-bot
Copy link
Collaborator

Cloud Manager UI test results

🔺 28 failing tests on test run #7 ↗︎

❌ Failing✅ Passing↪️ Skipped🕐 Duration
28 Failing838 Passing11 Skipped66m 30s

Details

Failing Tests
SpecTest
bucket-create-multicluster.spec.tsCloud Manager Cypress Tests→Object Storage Multicluster Bucket create » can create object storage bucket with OBJ Multicluster
bucket-object-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 bucket object tests » can check Object details drawer with E0 endpoint type
bucket-object-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 bucket object tests » can check Object details drawer with E1 endpoint type
bucket-object-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 bucket object tests » can check Object details drawer with E2 endpoint type
bucket-object-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 bucket object tests » can check Object details drawer with E3 endpoint type
bucket-object-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 bucket object tests » displays successfully fetched buckets, warning message for single failed fetch
bucket-object-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 bucket object tests » displays successfully fetched buckets, warning message for multiple failed fetches
bucket-details-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen 2 bucket details tabs→Access and SSL/TLS tabs » does not hide the CORS toggle and SSL/TLS tab for buckets with an E0 endpoint
bucket-details-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen 2 bucket details tabs→Access and SSL/TLS tabs » does not hide the CORS toggle and SSL/TLS tab for buckets with an E1 endpoint
bucket-details-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen 2 bucket details tabs→Access and SSL/TLS tabs » hides the CORS toggle and SSL/TLS tab for for buckets with an E2 endpoint
bucket-details-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen 2 bucket details tabs→Access and SSL/TLS tabs » hides the CORS toggle and SSL/TLS tab for for buckets with an E3 endpoint
object-storage-errors.spec.tsCloud Manager Cypress Tests→object storage failure paths » shows error upon object upload failure
object-storage-errors.spec.tsCloud Manager Cypress Tests→object storage failure paths » shows error upon object list retrieval failure
access-key.e2e.spec.tsCloud Manager Cypress Tests→object storage access key end-to-end tests » can create an access key with limited access - e2e
object-storage.e2e.spec.tsCloud Manager Cypress Tests→object storage end-to-end tests » can create and delete object storage buckets
object-storage.e2e.spec.tsCloud Manager Cypress Tests→object storage end-to-end tests » can update bucket access
access-keys-multicluster.spec.tsCloud Manager Cypress Tests→Object Storage Multicluster access keys » can create limited access keys with OBJ Multicluster
object-storage-objects-multicluster.spec.tsCloud Manager Cypress Tests→Object Storage Multicluster objects » can upload, access, and delete objects
object-storage.smoke.spec.tsCloud Manager Cypress Tests→object storage smoke tests » can create object storage bucket - smoke
object-storage.smoke.spec.tsCloud Manager Cypress Tests→object storage smoke tests » can upload, view, and delete bucket objects - smoke
object-storage.smoke.spec.tsCloud Manager Cypress Tests→object storage smoke tests » can delete object storage bucket - smoke
bucket-create-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 create bucket tests » can create a bucket with E0 endpoint type
bucket-create-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 create bucket tests » can create a bucket with E1 endpoint type
bucket-create-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 create bucket tests » can create a bucket with E2 endpoint type
bucket-create-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 create bucket tests » can create a bucket with E3 endpoint type
bucket-create-gen2.spec.tsCloud Manager Cypress Tests→Object Storage Gen2 create bucket tests » handles errors and validation
bucket-delete-multicluster.spec.tsCloud Manager Cypress Tests→Object Storage Multicluster Bucket delete » can delete object storage bucket with OBJ Multicluster
enable-object-storage.spec.tsCloud Manager Cypress Tests→Object Storage enrollment » can enroll in Object Storage

Troubleshooting

Use this command to re-run the failing tests:

pnpm cy:run -s "cypress/e2e/core/objectStorageMulticluster/bucket-create-multicluster.spec.ts,cypress/e2e/core/objectStorageGen2/bucket-object-gen2.spec.ts,cypress/e2e/core/objectStorageGen2/bucket-details-gen2.spec.ts,cypress/e2e/core/objectStorage/object-storage-errors.spec.ts,cypress/e2e/core/objectStorage/access-key.e2e.spec.ts,cypress/e2e/core/objectStorage/object-storage.e2e.spec.ts,cypress/e2e/core/objectStorageMulticluster/access-keys-multicluster.spec.ts,cypress/e2e/core/objectStorageMulticluster/object-storage-objects-multicluster.spec.ts,cypress/e2e/core/objectStorage/object-storage.smoke.spec.ts,cypress/e2e/core/objectStorageGen2/bucket-create-gen2.spec.ts,cypress/e2e/core/objectStorageMulticluster/bucket-delete-multicluster.spec.ts,cypress/e2e/core/objectStorage/enable-object-storage.spec.ts"

@abailly-akamai
Copy link
Contributor Author

Oh boy this was not expected. Since not being familiar enough with this feature I will close this for now and let the storage team find a more holistic refactor including a much needed cleanup - sorry @skulpok-akamai - i tried :D

@github-project-automation github-project-automation bot moved this from Approved to Merged in Cloud Manager Feb 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Object Storage deals with Object Storage

Projects

Status: Merged

Development

Successfully merging this pull request may close these issues.

5 participants