Story #7710
closed
As a user, I can use 'flush' after the migrations are applied and receive the required AccessPolicies
Status:
CLOSED - CURRENTRELEASE
Description
Problem¶
As a user experienced if a user does the following they will have a problem:
- User runs migration and receives the AccessPolicy via a data migration like this one
- User then later calls 'flush' which keeps migrations marked as "run" but drops all data including the AccessPolicy
- User then tries to use Pulp, but receives
AccessPolicy matching query does not exist
.
Solution 1¶
Change where we recommend the AccessPolicy data is created.
- Stop doing it in migrations
- Instead do it in a post-migrate signal
- If the AccessPolicy is already in the db catch the Duplicate entry and move on
- This would need to be changed in the plugin writer docs here
- Also any existing AccessPolicy made in migrations would also have to be put here too. Currently that is only one, created in migration 42.
Solution 2:¶
Use a fixtures approach instead.
Solution 1 seems more user-friendly since user doesn't need to do anything, however this will run with every django-migrate.
Solution 2 is a Django-native way to fill in the database, it's explicit and can be run on_demand. It's less user-friendly since it's one more step.
I hear a strong resistance in the community with regards to signals, so maybe solution #2 is the way.
I'm also somewhat concerned what to do if/when data model changes for the data we load in. Is any of the solutions provide a better way to handle that? and also a check that a certain migration applied before loading the data.
The overwriting nature of fixtures I think is not a good fit for this need because users can customize the AccessPolicy at any point and we can't overwrite it.
I also read the #django recommendation to not use signals, but I didn't read any evidence with it, so I put it into the fear, uncertainty, and doubt category. Solution 1 has a great user experience, so I think we should prototype solution 1 and see how reliable (or not) it is for us.
- Sprint/Milestone set to 3.9.0
- Groomed changed from No to Yes
- Sprint set to Sprint 86
- Status changed from NEW to ASSIGNED
- Assignee set to mdellweg
- Status changed from ASSIGNED to POST
- Status changed from POST to MODIFIED
- % Done changed from 0 to 100
- Status changed from MODIFIED to CLOSED - CURRENTRELEASE
Also available in: Atom
PDF
Add access policies via post_migrate signal
fixes #7710 https://pulp.plan.io/issues/7710