#56293 closed defect (bug) (fixed)
Use 'MINUTE_IN_SECONDS' for consistency in 'update.php' file
| Reported by: |
|
Owned by: |
|
|---|---|---|---|
| Milestone: | 6.1 | Priority: | low |
| Severity: | normal | Version: | |
| Component: | Administration | Keywords: | has-patch dev-feedback |
| Focuses: | coding-standards | Cc: |
Description (last modified by )
In the 'wp-includes/update.php' file there are multiple instances where variable $timeout set to plain integer 30 like:
$timeout = 30;
I think It should be like this (MINUTE_IN_SECONDS also used multiple time in this file) as done here in this commit [53714]:
$timeout = MINUTE_IN_SECONDS / 2;
Attachments (2)
Change History (45)
#1
in reply to:
โย description
@
3 years ago
#3
@
3 years ago
- Milestone changed from Awaiting Review to 6.1
- Owner set to audrasjb
- Status changed from new to reviewing
Good point!
Moving for 6.1 consideration.
This ticket was mentioned in โPR #3029 on โWordPress/wordpress-develop by โaudrasjb.
3 years ago
#4
- Keywords has-patch added; needs-patch removed
#6
@
3 years ago
The 56293.diff patch seems unnecessarily complex. Just because we want to say 2 hours or 5 hours, doesn't mean we need to derive the 2 or the 5 from some division of the MINUTE_IN_SECONDS constant.
#7
follow-up:
โย 9
@
3 years ago
hey @krupalpanchal ,
I checked your 56293.diffโ and looks to me your changes aren't what I suggested.
To me,
2 * HOUR_IN_SECONDS makes more sense than ( MINUTE_IN_SECONDS / 30 ) * HOUR_IN_SECONDS
same goes for the other line's change.
Because, When I see 2 * HOUR_IN_SECONDS it clearly makes me understand that it's twice an hour in seconds but when there's something like ( MINUTE_IN_SECONDS / 30 ) * HOUR_IN_SECONDS it makes it more hard to read.
My point was these constants like (MINUTE_IN_SECONDS, HOUR_IN_SECONDS) can make the timing numbers more readable for a non programmer. But, I don't see how your changes make it more readable.
#9
in reply to:
โย 7
@
3 years ago
The 56293.diff patch seems unnecessarily complex. Just because we want to say 2 hours or 5 hours, doesn't mean we need to derive the 2 or the 5 from some division of the MINUTE_IN_SECONDS constant.
2 * HOUR_IN_SECONDSmakes more sense than( MINUTE_IN_SECONDS / 30 ) * HOUR_IN_SECONDS
same goes for the other line's change.
Agreed.
#10
@
3 years ago
@arrasel403 thanks for your patch but @audrasjb doing some extra care about this issue so I think the PR has a better solution than the patch. But you ( @arrasel403 ) are most welcome as a new contributor.
#11
@
3 years ago
- Description modified (diff)
- Keywords changes-requested added
Thanks everyone!
// Three seconds, plus one extra second for every 10 themes. $timeout = MINUTE_IN_SECONDS / 20 + (int) ( count( $themes ) / 10 )
I think MINUTE_IN_SECONDS / 20 is also too complicated :) Keeping that as is, especially with the "Three seconds" comment above, seems more readable to me:
// Three seconds, plus one extra second for every 10 themes. $timeout = 3 + (int) ( count( $themes ) / 10 );
Same goes for this:
'timeout' => $doing_cron ? MINUTE_IN_SECONDS / 2 : MINUTE_IN_SECONDS / 20,
This might be more readable:
// Half a minute when doing cron tasks, 3 seconds otherwise. 'timeout' => $doing_cron ? MINUTE_IN_SECONDS / 2 : 3,
#12
@
3 years ago
Thanks @SergeyBiryukov ,
I'm not sure if it's a coincident but I was just about to make the same comment in the PR. Agreed about MINUTE_IN_SECONDS / 20 being complicated.
#13
@
3 years ago
Thank you @SergeyBiryukov, it would be better if you suggest this change request in the PR.
โhz-tyfoon commented on โPR #3029:
3 years ago
#14
Hey @audrasjb,
I can see U've used MINUTE_IN_SECONDS / 20 in line number 190, 411 & 692.
In my humble opinion, looks to me using MINUTE_IN_SECONDS / 20 also makes it more complicated & less readable.
@SergeyBiryukov also suggesting the same.
So, I think may be those 3 changes may not be necessary.
โhz-tyfoon commented on โPR #3029:
3 years ago
#16
thanks @peterwilsoncc for reviewing.
0.5 * MINUTE_IN_SECONDSis possibly ok
This one also sounds solid, readable & performance firendly to me.
The reviews of this PR didn't show up in the trac.
Hopefully, this comment is going to show up in the trac ticket.
๐
#17
follow-up:
โย 18
@
3 years ago
- Keywords dev-feedback added; changes-requested removed
- Priority changed from normal to low
PR updated as per @SergeyBiryukov 's proposal.
@peterwilsoncc suggested to replace MINUTE_IN_SECONDS / 2 with 0.5 * MINUTE_IN_SECONDS.
I personally find the former more readable than the latter.
That's not super important, but let's collect some feedback from other committers before shipping this tiny enhancement ;)
#18
in reply to:
โย 17
@
3 years ago
Replying to audrasjb:
@peterwilsoncc suggested to replace
MINUTE_IN_SECONDS / 2with0.5 * MINUTE_IN_SECONDS.
As noted in comment:10:ticket:55647, the former gives int(30) while the latter gives float(30), so we might need to write it like this to avoid unexpected type changes:
(int) ( 0.5 * MINUTE_IN_SECONDS )
That said, the timeout parameter of WP_Http::request() is documented as float, so a float may be fine here, and casting to (int) may be redundant.
I don't have a strong preference on the format we choose here, but ideally the instances from [53714] should be updated to use the same format.
#19
@
3 years ago
Alright, let's at least keep the consistency with [53714] and stick with the division.
#21
follow-ups:
โย 22
โย 24
@
3 years ago
Taking a snippet from โa review comment I left on the PR:
IMO, it's reasonable to expect a reader won't think:
30 milliseconds : 3 milliseconds or 30 minutes : 3 minutes.
Instead, for known values, I'd suggest that we only make use of MINUTE_IN_SECONDS when the value exceeds 59 seconds.
i.e. 15, 30, 55, MINUTE_IN_SECONDS, 2 * MINUTE_IN_SECONDS, 30 * MINUTE_IN_SECONDS, HOUR_IN_SECONDS
#22
in reply to:
โย 21
@
3 years ago
Replying to costdev:
Taking a snippet from โa review comment I left on the PR:
Thanks @costdev ๐
I've checked your review in the PR. Timeout seconds like 35, 55 (may be even 45) doesn't sound standard to me. I'm not sure if these are used anywhere in the core codebase. If these are used, then I don't suppose using MINUTE_IN_SECONDS / 2 + 5 instead of 35 would be more readable. Same goes for 55 & 45.
for 30 however, both MINUTE_IN_SECONDS / 2 & 0.5 * MINUTE_IN_SECONDS can make more sense than plain 30 IMO.
Just noting, if your proposed for known values, I'd suggest that we only make use of MINUTE_IN_SECONDS when the value exceeds 59 seconds is implemented then we may do that throughout the codebase for consistency. Same goes for the 4 instances of MINUTE_IN_SECONDS / 2 in [53714].
#23
@
3 years ago
@hztyfoon Yep, 35, 45, 55 aren't standard timeouts, they were just examples to show how we could just hardcode < 60 and use MINUTE_IN_SECONDS for 60+.
It's highly unlikely that the reader will interpret $timeout = 30 as referring to milliseconds or minutes, especially since 30 minutes would just be written as 30 * MINUTE_IN_SECONDS.
I see it as much more helpful towards consistency if we only use the constants when it's additive, so that we don't end up with examples like 30 * MINUTE_IN_SECONDS and HOUR_IN_SECONDS / 2 in the codebase.
#24
in reply to:
โย 21
;
follow-up:
โย 25
@
3 years ago
Replying to costdev:
Instead, for known values, I'd suggest that we only make use of
MINUTE_IN_SECONDSwhen the value exceeds59seconds.
I agree, this makes sense.
For the four instances of MINUTE_IN_SECONDS / 2 in [53714], that could be a comment instead of the constant:
define( 'FS_TIMEOUT', 30 ); // 30 seconds.
#25
in reply to:
โย 24
@
3 years ago
Thanks a lot @costdev ๐๐๐
Great point. Didn't get it earlier, got it now.
If I understand correctly, one of the point @costdev made is (written in my own english ๐):
If
MINUTE_IN_SECONDS / 2is implemented then there can be a point/logic/explanation for using both30 * MINUTE_IN_SECONDSandHOUR_IN_SECONDS / 2.
And that wouldn't be helpful towards consistency.
This can also make the case for possibly replace MINUTE_IN_SECONDS / 2 with 0.5 * MINUTE_IN_SECONDS as suggested by @peterwilsoncc in the PR review.
So, I think the following proposed change by @SergeyBiryukov is better.
For the four instances of
MINUTE_IN_SECONDS / 2in [53714], that could be a comment instead of the constant:
define( 'FS_TIMEOUT', 30 ); // 30 seconds.
Also,
just came to mind about following
Replying to SergeyBiryukov:
Replying to costdev:
Instead, for known values, I'd suggest that we only make use of
MINUTE_IN_SECONDSwhen the value exceeds59seconds.
in the case of 90, wouldn't "plain 90 with an added comment beside it" be better than 1.5 * MINUTE_IN_SECONDS? [note: `90` exceeds `59`]
Any thought?
#26
follow-up:
โย 27
@
3 years ago
- Keywords dev-feedback added
in the case of 90, wouldn't "plain 90 with an added comment beside it" be better than 1.5 * MINUTE_IN_SECONDS? [note: `90` exceeds `59`] Any thought?
I think that's a fair point. "90 seconds" is more commonly used than "one and a half minutes" or "a minute and a half". While it breaks the consistency of exceeds 59, I believe it's the only edge case.
That would mean, going forward, we would have (constant names are obviously not real, just examples):
<?php define( 'WAIT', 5 ); // 5 seconds define( 'RETRYING_IN', 10 ); // 10 seconds define( 'UNZIP_TIMEOUT', 30 ); // 30 seconds define( 'DB_UPGRADE_TIMEOUT', MINUTE_IN_SECONDS ); define( 'UNDERWATER_TIMEOUT', 90 ); // 90 seconds define( 'FREE_PIZZA_TIMEOUT', 30 * MINUTE_IN_SECONDS ); define( 'ONE_HOUR_PHOTO_TIMEOUT', HOUR_IN_SECONDS );
What does everyone think of that format?
#27
in reply to:
โย 26
;
follow-ups:
โย 29
โย 30
โย 31
@
3 years ago
Replying to costdev:
What does everyone think of that format?
Sounds good. I guess the rule of thumb would be:
- If the value can be represented as an integer (not a fractional) number of minutes (hours, etc.), use the appropriate constant multiplied by that number.
- Otherwise, keep the value as is and add a comment with the units for clarity.
#28
@
3 years ago
Sounds good. I guess the rule of thumb would be:
- If the value can be represented as an integer (not a fractional) number of minutes (hours, etc.), use the appropriate constant multiplied by that number.
- Otherwise, keep the value as is and add a comment with the units for clarity.
Nicely summarized @SergeyBiryukov, that makes it really clear!
#29
in reply to:
โย 27
@
3 years ago
Replying to SergeyBiryukov:
I guess the rule of thumb would be:
- If the value can be represented as an integer (not a fractional) number of minutes (hours, etc.), use the appropriate constant multiplied by that number.
- Otherwise, keep the value as is and add a comment with the units for clarity.
Thanks @SergeyBiryukov.
That sounds very clear ๐๐๐.
#30
in reply to:
โย 27
;
follow-up:
โย 32
@
3 years ago
Replying to SergeyBiryukov:
Sounds good. I guess the rule of thumb would be:
- If the value can be represented as an integer (not a fractional) number of minutes (hours, etc.), use the appropriate constant multiplied by that number.
- Otherwise, keep the value as is and add a comment with the units for clarity.
So for this case 90 minutes will be 90 * MINUTE_IN_SECONDS instead of 1.5 * HOUR_IN_SECONDS or HOUR_IN_SECONDS + 30 * MINUTE_IN_SECONDS and all the like values will be so so, isn't it?
#31
in reply to:
โย 27
@
3 years ago
Replying to SergeyBiryukov:
Replying to costdev:
What does everyone think of that format?
Sounds good. I guess the rule of thumb would be:
- If the value can be represented as an integer (not a fractional) number of minutes (hours, etc.), use the appropriate constant multiplied by that number.
- Otherwise, keep the value as is and add a comment with the units for clarity.
That sounds clear ๐. Using a constant is more clear than making an arithmetic formula.
#32
in reply to:
โย 30
@
3 years ago
Replying to rudlinkon:
So for this case 90 minutes will be
90 * MINUTE_IN_SECONDSinstead of1.5 * HOUR_IN_SECONDSorHOUR_IN_SECONDS + 30 * MINUTE_IN_SECONDSand all the like values will be so so, isn't it?
Thannks a ton @rudlinkon.
That's really a good point. ๐๐๐
I'm not sure if 90 * MINUTE_IN_SECONDS make more sense than 1.5 * HOUR_IN_SECONDS.
Let's see what others think about this.
#33
@
3 years ago
I think both make sense, but 90 * MINUTE_IN_SECONDS is more familiar than 1.5 * HOUR_IN_SECONDS - think of some sport event durations, for example.
It also follows the rule of thumb that @SergeyBiryukov laid out:
I guess the rule of thumb would be:
- If the value can be represented as an integer (not a fractional) number of minutes (hours, etc.), use the appropriate constant multiplied by that number.
- Otherwise, keep the value as is and add a comment with the units for clarity.
This ticket was mentioned in โPR #3047 on โWordPress/wordpress-develop by โcostdev.
3 years ago
#34
- If the value can be represented as an integer (not a fractional) number of minutes (hours, etc.), use the appropriate constant multiplied by that number.
- Otherwise, keep the value as is and add a comment with the units for clarity.
Trac ticket: https://core.trac.wordpress.org/ticket/56293
#35
@
3 years ago
I have submitted โPR 3047 so that we can see the proposed changes in place and move from there.
This ticket was mentioned in โSlack in #core by audrasjb. โView the logs.
3 years ago
#38
@
3 years ago
The current approach (โPR 3047) looks good to me.
#39
@
3 years ago
โPR 3047 looks good to me as well.
โaudrasjb commented on โPR #3047:
3 years ago
#42
Committed in https://core.trac.wordpress.org/changeset/54113
โaudrasjb commented on โPR #3029:
3 years ago
#43
closed in favor of PR 3047
โฌ๏ธ Sorry, I linked wrong ticket there. I meant this commit: [53714]