Skip to content
  • epriestley's avatar
    Make SQL patch management DAG-based and provide namespace support · 087cc080
    epriestley authored
    Summary:
    This addresses three issues with the current patch management system:
    
      # Two people developing at the same time often pick the same SQL patch number, and then have to go rename it. The system catches this, but it's silly.
      # Second/third-party developers can't use the same system to manage auxiliary storage they may want to add.
      # There's no way to build mock databases for unit tests that need to do reads.
    
    To resolve these things, you can now name your patches whatever you want and conflicts are just merge conflicts, which are less of a pain to fix than filename conflicts.
    
    Dependencies are now a DAG, with implicit dependencies created on the prior patch if no dependencies are specified. Developers can add new concrete subclasses of `PhabricatorSQLPatchList` to add storage management, and define the dependency branchpoint of their patches so they apply in the correct order (although, generally, they should not depend on the mainline patches, presumably).
    
    The commands `storage upgrade --namespace test1234` and `storage destroy --namespace test1234` will allow unit tests to build and destroy MySQL storage.
    
    A "quickstart" mode allows an upgrade from scratch in ~1200ms. Destruction takes about 200ms. These seem like fairily reasonable costs to actually use in tests. Building from scratch patch-by-patch takes about 6000ms.
    
    Test Plan:
      - Created new databases from scratch with and without quickstart in a separate test namespace. Pointed the webapp at the test namespaces, browsed around, everything looked good.
      - Compared quickstart and no-quickstart dump states, they're identical except for mysqldump timestamps and a few similar things.
      - Upgraded a legacy database to the new storage format.
      - Destroyed / dumped storage.
    
    Reviewers: edward, vrana, btrahan, jungejason
    
    Reviewed By: btrahan
    
    CC: aran, nh
    
    Maniphest Tasks: T140, T345
    
    Differential Revision: https://secure.phabricator.com/D2323
    087cc080