Page MenuHomePhabricator

Convert dashboard panel storage to a format which can handle duplicates

Authored by epriestley on Apr 12 2019, 3:10 PM.
Referenced Files
F13318784: D20405.diff
Thu, Jun 13, 11:37 AM
F13308093: D20405.id48712.diff
Mon, Jun 10, 12:34 AM
F13294935: D20405.diff
Wed, Jun 5, 9:08 PM
F13271999: D20405.diff
Thu, May 30, 7:14 AM
Wed, May 29, 5:39 AM
F13256330: D20405.id48712.diff
Sat, May 25, 11:13 AM
Sat, May 25, 10:34 AM
F13256095: D20405.id48694.diff
Sat, May 25, 9:33 AM
Restricted Owners Package



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
Lint Not Applicable
Tests Not Applicable