Re: [RFC PATCH 0/1] maintenance: separate parallelism safe and unsafe tasks
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Nov 11, 2024, 04:50 UTC
- Message-ID
- <xmqqzfm6fk6z.fsf@gitster.g>
- In-Reply-To
- <20241108173112.1240584-1-calvinwan@google.com>
Calvin Wan <calvinwan@google.com> writes:
Show 9 quoted lines
> However, this is not the case as discovered earlier[1] -- certain > maintenance and gc tasks are not safe to run in parallel with other > commands. The consequences of such are that scripts with commands that > trigger maintenance/gc can race and crash. > > Users can also run into > unexpected errors from porcelain commands that touch common files such > as HEAD.lock, unaware that a background maintenance/gc task is the one > holding the lock.
The symptom looks more like a controlled refusal of execution than a crash.
> As Patrick points out[2], the two unsafe commands are `git reflog expire > --all`, invoked by gc, and `git pack-refs --all --prune`, invoked by > maintenance. We can create two buckets for subtasks -- one for async > safe tasks and one for async unsafe tasks.
I am not sure if they can be partitioned into black and white, but let's see.
> This series is in RFC to see if the general direction of the patch is > going in the right direction. I left a couple of WIPs in the first patch > documenting what still needs to be done if the direction is palatable.