Skip to content

Commit ec5d9d6

Browse files
derrickstoleegitster
authored andcommitted
maintenance: use random minute in launchctl scheduler
The get_random_minute() method was created to allow maintenance schedules to be fixed to a random minute of the hour. This randomness is only intended to spread out the load from a number of clients, but each client should have an hour between each maintenance cycle. Use get_random_minute() when constructing the schedules for launchctl. The format already includes a 'Minute' key which is modified from 0 to the random minute. Signed-off-by: Derrick Stolee <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 89024a0 commit ec5d9d6

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

builtin/gc.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1708,7 +1708,6 @@ static int get_schedule_cmd(const char **cmd, int *is_available)
17081708
return 1;
17091709
}
17101710

1711-
MAYBE_UNUSED
17121711
static int get_random_minute(void)
17131712
{
17141713
/* Use a static value when under tests. */
@@ -1830,6 +1829,7 @@ static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
18301829
struct strbuf plist = STRBUF_INIT, plist2 = STRBUF_INIT;
18311830
struct stat st;
18321831
const char *cmd = "launchctl";
1832+
int minute = get_random_minute();
18331833

18341834
get_schedule_cmd(&cmd, NULL);
18351835
preamble = "<?xml version=\"1.0\"?>\n"
@@ -1855,29 +1855,30 @@ static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
18551855
case SCHEDULE_HOURLY:
18561856
repeat = "<dict>\n"
18571857
"<key>Hour</key><integer>%d</integer>\n"
1858-
"<key>Minute</key><integer>0</integer>\n"
1858+
"<key>Minute</key><integer>%d</integer>\n"
18591859
"</dict>\n";
18601860
for (i = 1; i <= 23; i++)
1861-
strbuf_addf(&plist, repeat, i);
1861+
strbuf_addf(&plist, repeat, i, minute);
18621862
break;
18631863

18641864
case SCHEDULE_DAILY:
18651865
repeat = "<dict>\n"
18661866
"<key>Day</key><integer>%d</integer>\n"
18671867
"<key>Hour</key><integer>0</integer>\n"
1868-
"<key>Minute</key><integer>0</integer>\n"
1868+
"<key>Minute</key><integer>%d</integer>\n"
18691869
"</dict>\n";
18701870
for (i = 1; i <= 6; i++)
1871-
strbuf_addf(&plist, repeat, i);
1871+
strbuf_addf(&plist, repeat, i, minute);
18721872
break;
18731873

18741874
case SCHEDULE_WEEKLY:
1875-
strbuf_addstr(&plist,
1876-
"<dict>\n"
1877-
"<key>Day</key><integer>0</integer>\n"
1878-
"<key>Hour</key><integer>0</integer>\n"
1879-
"<key>Minute</key><integer>0</integer>\n"
1880-
"</dict>\n");
1875+
strbuf_addf(&plist,
1876+
"<dict>\n"
1877+
"<key>Day</key><integer>0</integer>\n"
1878+
"<key>Hour</key><integer>0</integer>\n"
1879+
"<key>Minute</key><integer>%d</integer>\n"
1880+
"</dict>\n",
1881+
minute);
18811882
break;
18821883

18831884
default:

0 commit comments

Comments
 (0)