Re: [PATCH 04/10] packed-backend: add "packed-refs" header consistency check
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Jan 24, 2025, 07:51 UTC
- Message-ID
- <Z5NGdXJtUngG478V@pks.im>
- In-Reply-To
- <Z4pnyhF2V2ykuHlg@ArchLinux>
On Fri, Jan 17, 2025 at 10:23:06PM +0800, shejialuo wrote:
Show 29 quoted lines
> On Thu, Jan 16, 2025 at 02:57:37PM +0100, Patrick Steinhardt wrote:
> > On Sun, Jan 05, 2025 at 09:49:37PM +0800, shejialuo wrote:
> > > @@ -1779,7 +1867,24 @@ static int packed_fsck(struct ref_store *ref_store,
> > > goto cleanup;
> > > }
> > >
> > > + if (strbuf_read_file(&packed_ref_content, refs->path, 0) < 0) {
> > > + /*
> > > + * Although we have checked that the file exists, there is a possibility
> > > + * that it has been removed between the lstat() and the read attempt by
> > > + * another process. In that case, we should not report an error.
> > > + */
> > > + if (errno == ENOENT)
> > > + goto cleanup;
> >
> > Unlikely, but good to guard us against that condition regardless. It's
> > still not entirely race-free though because the file could meanwhile
> > have changed into a symlink, and we wouldn't notice now. We could fix
> > that by using open(O_NOFOLLOW), fstat the returne file descriptor and
> > then use `strbuf_read()` to slurp in the file.
> >
>
> Would this be too complicated for us to avoid race condition and we will
> introduce a lot of code to handle above logic. Because there is a
> possibility that when finishing reading the file content to the memory,
> the file could be changed into a symlink and we cannot notice. So, I
> wanna say we can't avoid race condition totally. It would be good if we
> avoid race, but what I am concern about here is that we would make the
> logic too complicated. So, could we make it unchanged?It would ultimately only be two additional function calls, so I don't think it's going to add a ton of complexity. Whether things are changing _after_ we have opened and read the file is a different issue, and I agree that we shouldn't have to care about that case. What we're after is whether things are correct when running consistency checks, it's always a possibility that e.g. the packed-refs file gets rewritten while we do it.
Patrick