threads / discuss / 62155

Prefetch maintenance might lead to thundering herd issues

Subject: Prefetch maintenance might lead to thundering herd issues

## tl;dr

4 messages between Sep 20, 2024 and Sep 23, 2024.

replies: 3people: 2as markdown or json

Shubham Kanodia· Sep 20, 2024, 15:15 UTC · lore

The current git-maintenance prefetch command allows daily, weekly, and hourly schedules. However, in repositories with many active developers, timing `fetch` to happen at the same wall clock time can lead to a thundering herd problem for the backend server.

Ideally, these fetch requests would be spaced out by a small amount, so as not to lead to a co-ordinated load on the server.

I don't see a way to configure this at the moment in a cross-platform way at the moment. Perhaps it might be sensible to offset the cron schedules slightly for users so as to not cause such an issue?

This might come at a small cost of predictability of the run, but that should be okay as predictability isn't the primary goal for maintenance.

Derrick Stolee· Sep 20, 2024, 19:20 UTC · re: Shubham Kanodia · lore

Re: Prefetch maintenance might lead to thundering herd issues

On 9/20/24 11:15 AM, Shubham Kanodia wrote:
Show 12 quoted lines
> The current git-maintenance prefetch command allows daily, weekly, and
> hourly schedules.
> However, in repositories with many active developers, timing `fetch`
> to happen at the same wall clock time can lead to a thundering herd
> problem for the backend server.
> 
> Ideally, these fetch requests would be spaced out by a small amount,
> so as not to lead to a co-ordinated load on the server.
> 
> I don't see a way to configure this at the moment in a cross-platform
> way at the moment. Perhaps it might be sensible to offset the cron
> schedules slightly for users so as to not cause such an issue?

This is already handled by using a random minute of the hour, as implemented in 9b43399057 (maintenance: use random minute in cron scheduler, 2023-08-10), for example. There are similar uses for systemd, launchctl, and schtasks schedulers (look for uses of the get_random_minute() method).

Are you noticing that this isn't working as expected?

Thanks, -Stolee

Shubham Kanodia· Sep 22, 2024, 18:40 UTC · re: Derrick Stolee · lore

Re: Prefetch maintenance might lead to thundering herd issues

On Sat, Sep 21, 2024 at 1:20 AM Derrick Stolee <stolee@gmail.com> wrote:
Show 26 quoted lines
>
> On 9/20/24 11:15 AM, Shubham Kanodia wrote:
> > The current git-maintenance prefetch command allows daily, weekly, and
> > hourly schedules.
> > However, in repositories with many active developers, timing `fetch`
> > to happen at the same wall clock time can lead to a thundering herd
> > problem for the backend server.
> >
> > Ideally, these fetch requests would be spaced out by a small amount,
> > so as not to lead to a co-ordinated load on the server.
> >
> > I don't see a way to configure this at the moment in a cross-platform
> > way at the moment. Perhaps it might be sensible to offset the cron
> > schedules slightly for users so as to not cause such an issue?
>
> This is already handled by using a random minute of the hour, as
> implemented in 9b43399057 (maintenance: use random minute in cron
> scheduler, 2023-08-10), for example. There are similar uses for
> systemd, launchctl, and schtasks schedulers (look for uses of
> the get_random_minute() method).
>
> Are you noticing that this isn't working as expected?
>
> Thanks,
> -Stolee
>
Ah, thanks for pointing that out. It wasn't really clear from the
multiple examples and cron expressions on the git
maintenance documentation page (which have examples such as `0 1-23 *
* *` for hourly). I should've looked
more deeply into the implementation.

Perhaps adding a line to the existing doc might be of help? What do you think about adding a line to the section on scheduling —

diff --git a/Documentation/git-maintenance.txt
b/Documentation/git-maintenance.txt
index 51d0f7e94b..34828cdfe6 100644
--- a/Documentation/git-maintenance.txt
+++ b/Documentation/git-maintenance.txt
@@ -217,11 +217,13 @@ on an hourly basis. Each run executes the
"hourly" tasks. At midnight,
that process also executes the "daily" tasks. At midnight on the first day
of the week, that process also executes the "weekly" tasks. A single
process iterates over each registered repository, performing the scheduled
-tasks for that frequency. Depending on the number of registered
-repositories and their sizes, this process may take longer than an hour.
-In this case, multiple `git maintenance run` commands may run on the same
-repository at the same time, colliding on the object database lock. This
-results in one of the two tasks not running.
+tasks for that frequency. The processes are scheduled to a random minute of
+the hour per client to spread out load from multiple clients (e.g. from
+prefetching). Depending on the number of registered repositories and their
+sizes, this process may take longer than an hour. In this case, multiple
+`git maintenance run` commands may run on the same repository at the same
+time, colliding on the object database lock. This results in one of the two
+tasks not running.
If you find that some maintenance windows are taking longer than one hour
to complete, then consider reducing the complexity of your maintenance

--
Derrick Stolee· Sep 23, 2024, 01:26 UTC · re: Shubham Kanodia · lore

Re: Prefetch maintenance might lead to thundering herd issues

On 9/22/24 2:40 PM, Shubham Kanodia wrote:
> On Sat, Sep 21, 2024 at 1:20 AM Derrick Stolee <stolee@gmail.com> wrote:
Show 5 quoted lines
>> This is already handled by using a random minute of the hour, as
>> implemented in 9b43399057 (maintenance: use random minute in cron
>> scheduler, 2023-08-10), for example. There are similar uses for
>> systemd, launchctl, and schtasks schedulers (look for uses of
>> the get_random_minute() method).
Show 9 quoted lines
> Ah, thanks for pointing that out. It wasn't really clear from the
> multiple examples and cron expressions on the git
> maintenance documentation page (which have examples such as `0 1-23 *
> * *` for hourly). I should've looked
> more deeply into the implementation.
> 
> Perhaps adding a line to the existing doc might be of help? What do
> you think about adding a line to the
> section on scheduling —

I do think a doc change would help. Please submit it as a patch for review!

Thanks, -Stolee

← back to recent threads