Page MenuHomePhabricator

Convert dashboard panel storage to a format which can handle duplicates

Authored by epriestley on Apr 12 2019, 3:10 PM.



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

rP Phabricator
Automatic diff as part of commit; lint not applicable.
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

epriestley created this revision.Apr 12 2019, 3:10 PM
Owners added a subscriber: Restricted Owners Package.Apr 12 2019, 3:10 PM
epriestley requested review of this revision.Apr 12 2019, 3:12 PM
amckinley accepted this revision.Apr 12 2019, 7:33 PM
This revision is now accepted and ready to land.Apr 12 2019, 7:33 PM
This revision was automatically updated to reflect the committed changes.