Opened 6 months ago

Closed 4 months ago

#36273 closed Cleanup/optimization (fixed)

Move Index system checks from Model to Index.check()

Reported by: Tim Graham Owned by: Tim Graham
Component: Core (System checks) Version: dev
Severity: Normal Keywords:
Cc: Clifford Gama, Simon Charette Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

In #30613 (53209f78302a639032afabf5326d28d4ddd9d03c), some Index validation was moved from Index.__init__() to Model.check(). This prevents Index subclasses from customizing or extending the validation. The logic should be in Index.check(), following the pattern of fields, constraints, etc.

Change History (12)

comment:1 by Simon Charette, 6 months ago

Triage Stage: UnreviewedAccepted

Agreed, this is coherent with #35234 (0fb104dda287431f5ab74532e45e8471e22b58c8) to move constraint checks to Constraint.check.

comment:2 by Tanishq, 5 months ago

@Simon Charette

Hi,

I'd like to claim ticket #36273 and work on moving the Index system checks from Model.check() to Index.check(), following the pattern used for fields and constraints. I'll submit a PR once the changes are ready.

Let me know if there are any specific considerations or related discussions I should be aware of before proceeding.

comment:3 by Simon Charette, 5 months ago

The ticket is yours Tanishq, make sure to assign it to you.

As mentioned above the required changes can borrow a lot from 0fb104dda287431f5ab74532e45e8471e22b58c8 except for the fact that we can name the method Index.check from the get go (there's no conflict with a pre-existing attribute).

comment:4 by Simon Charette, 5 months ago

Small note that this work landing would make implementing ticket:32770#comment:5 way more straightforward.

comment:5 by Tanishq, 5 months ago

Owner: set to Tanishq
Status: newassigned

comment:6 by Clifford Gama, 5 months ago

Cc: Clifford Gama added

comment:7 by Tim Graham, 5 months ago

Owner: changed from Tanishq to Tim Graham

I created a draft PR, however, there's an undesired behavior change in this patch. The checks that don't require a database like index name validation are no longer run at the makemigrations stage since makemigrations does not provide the databases argument to system checks and Index.check() is guarded by router.allow_migrate_model(db, ...) (see also ticket:31286#comment:7).

Possibly this could be mitigated independently, however, I'm not sure it was a good idea to move validation that can be done in Index.__init__() to system checks (was done in #30613 / 53209f78302a639032afabf5326d28d4ddd9d03c). Index.__init__() does a lot argument validation and I don't see a reason why the validation of name should be treated differently.

comment:8 by Simon Charette, 5 months ago

Cc: Simon Charette added

Tanish, you haven't provided any updates in the past month, are you still actively working on this?


Index.__init__() does ​a lot argument validation and I don't see a reason why the validation of name should be treated differently.

I suspect that one of the intent was that this validation could be silenced on databases that don't have Oracle-like restriction in index names; if the validation is performed at __init__ time there's no way to silence it.

I'm not sure I agree with the cleaner and more consistent rationale of #30613 either but the move to Index.check(model, connection) should allow at least allow these checks to be eventually truly database specific (as they truly are only relevant on Oracle). In all cases I don't think it should be a blocker for this work and that we should focus our efforts on whether or not we believe ticket:31286#comment:9 is an adequate solution for the general problem of database related checks not running for database related commands.

in reply to:  8 comment:10 by Tanishq, 4 months ago

Replying to Simon Charette:

Tanish, you haven't provided any updates in the past month, are you still actively working on this?


Index.__init__() does ​a lot argument validation and I don't see a reason why the validation of name should be treated differently.

I suspect that one of the intent was that this validation could be silenced on databases that don't have Oracle-like restriction in index names; if the validation is performed at __init__ time there's no way to silence it.

I'm not sure I agree with the cleaner and more consistent rationale of #30613 either but the move to Index.check(model, connection) should allow at least allow these checks to be eventually truly database specific (as they truly are only relevant on Oracle). In all cases I don't think it should be a blocker for this work and that we should focus our efforts on whether or not we believe ticket:31286#comment:9 is an adequate solution for the general problem of database related checks not running for database related commands.

sorry, about that, I was working on this actively, but was encountering database issues which is resolved now I guess

Last edited 4 months ago by Tanishq (previous) (diff)

in reply to:  8 comment:11 by Tim Graham, 4 months ago

Has patch: set

Replying to Simon Charette:

In all cases I don't think it should be a blocker for this work...

Okay, then I suppose my PR is ready for review.

comment:12 by Simon Charette, 4 months ago

Triage Stage: AcceptedReady for checkin

comment:13 by Sarah Boyce <42296566+sarahboyce@…>, 4 months ago

Resolution: fixed
Status: assignedclosed

In 8638d8b:

Fixed #36273 -- Moved Index system checks from Model to Index.check().

Note: See TracTickets for help on using tickets.
Back to Top