Page MenuHomePhabricator

Convert dashboard panel storage to a format which can handle duplicates
ClosedPublic

Authored by epriestley on Apr 12 2019, 3:10 PM.
Tags
None
Referenced Files
Unknown Object (File)
Wed, Apr 10, 7:56 PM
Unknown Object (File)
Wed, Mar 27, 1:55 AM
Unknown Object (File)
Wed, Mar 27, 1:55 AM
Unknown Object (File)
Wed, Mar 27, 1:55 AM
Unknown Object (File)
Mar 5 2024, 1:55 PM
Unknown Object (File)
Feb 16 2024, 8:27 AM
Unknown Object (File)
Feb 8 2024, 4:38 PM
Unknown Object (File)
Feb 3 2024, 10:06 PM
Subscribers
Restricted Owners Package

Details

Summary

Ref T13272. See PHI945. Currently, dashboards tend to break when they have duplicate panels. Partly, this is because all the edit operations operate on a "panelPHID", so there's no way to say "remove the copy of panel X at the bottom of the right-hand column", since the operation is remove(phid) and that doesn't point at a specific copy of that panel.

In theory, the code is supposed to prevent duplicate panels, but (a) it doesn't always do this successfully and (b) there's no real reason you can't put duplicate panels on a dashboard if you want. There may even be good reason to do this if you have a "random cat picture" panel or something. Even if you aren't doing this on purpose, it's probably better to let you do it and then fix your mistake by removing the panel you don't want than to prevent the operation entirely.

To simplify this whole mess, I want to just support putting the same panel into multiple places on a dashboard. As a first step, change the storage format so each instance of a panel has a unique "panelKey".

Since each instance of each panel now has its own object, this will also let us give particular instances of panels things like "automatic refresh time" (T5514) or "custom name for this panel on this dashboard" later, if we want. Not clear these are valuable but having this capability can't hurt.

Test Plan
  • var_dump()'d the migration, looked at all the results.
  • Ran the migration.
NOTE: This breaks dashboards on its own since none of the other code has been changed yet, see followups.

Diff Detail

Repository
rP Phabricator
Lint
Lint Not Applicable
Unit
Tests Not Applicable