[Bug,debuginfod/29474] Server returns 404 for concurrent requests when leading to a same .rpm
Commit Message
https://sourceware.org/bugzilla/show_bug.cgi?id=29474
--- Comment #1 from Martin Liska <mliska at suse dot cz> ---
Have a better knowledge of what happens. Let's assume the following debugging
patch:
char* tmppath = NULL;
@@ -1776,6 +1779,7 @@ handle_buildid_r_match (bool internal_req_p,
{
// NB: now we know we have a complete reusable file; make fdcache
// responsible for unlinking it later.
+ obatched(clog) << "INTERN " << b_source1 << " filename=" << fn <<
endl;
fdcache.intern(b_source0, fn,
tmppath, archive_entry_size(e),
false); // prefetched ones go to the prefetch cache
@@ -1792,6 +1796,7 @@ handle_buildid_r_match (bool internal_req_p,
inc_metric ("http_responses_total","result",archive_extension + "
archive");
r = MHD_create_response_from_fd (archive_entry_size(e), fd);
+ obatched(clog) << "ASSIGN " << b_source1 << " filename=" << fn << " r="
<< r << endl;
if (r == 0)
{
if (verbose)
@@ -1820,6 +1825,7 @@ handle_buildid_r_match (bool internal_req_p,
}
// XXX: rpm/file not found: delete this R entry?
+ obatched(clog) << "RETURN" << b_source1 << " r=" << r << endl;
return r;
}
debuginfod log shows:
...
[Thu 11 Aug 2022 08:02:42 PM GMT] (21225/21257): found mtime=1659137364 stype=R
source0=/home/marxin/BIG/test/cross-aarch64-gcc12-debuginfo-12.1.1+git287-1.1.x86_64.rpm
source1=/usr/lib/debug/.dwz/cross-aarch64-gcc12-12.1.1+git287-1.1.x86_64
[Thu 11 Aug 2022 08:02:42 PM GMT] (21225/21251): found mtime=1659137364 stype=R
source0=/home/marxin/BIG/test/cross-aarch64-gcc12-debuginfo-12.1.1+git287-1.1.x86_64.rpm
source1=/usr/lib/debug/usr/aarch64-suse-linux/sys-root/lib64/libgcc_s.so.1-12.1.1+git287-1.1.x86_64.debug
...
[Thu 11 Aug 2022 08:02:42 PM GMT] (21225/21257): INTERN
/usr/lib/debug/.dwz/cross-aarch64-gcc12-12.1.1+git287-1.1.x86_64
filename=/usr/lib/debug/usr/aarch64-suse-linux/sys-root/lib64/libgcc_s.so.1-12.1.1+git287-1.1.x86_64.debug
<- so here 21257 request interns libgcc_s.so.1-12.1.1+git287-1.1.x86_64.debug
[Thu 11 Aug 2022 08:02:42 PM GMT] (21225/21251): SKIPPING due to
probe=/usr/lib/debug/usr/aarch64-suse-linux/sys-root/lib64/libgcc_s.so.1-12.1.1+git287-1.1.x86_64.debug
filename=/usr/lib/debug/usr/aarch64-suse-linux/sys-root/lib64/libgcc_s.so.1-12.1.1+git287-1.1.x86_64.debug
r=0 <- and due to that it's skipped here and we never assign r = ...
[Thu 11 Aug 2022 08:02:43 PM GMT] (21225/21251):
RETURN/usr/lib/debug/usr/aarch64-suse-linux/sys-root/lib64/libgcc_s.so.1-12.1.1+git287-1.1.x86_64.debug
r=0
...
Note in correct run the following happens:
[Thu 11 Aug 2022 08:16:42 PM GMT] (22289/22319): ASSIGN
/usr/lib/debug/usr/aarch64-suse-linux/sys-root/lib64/libgcc_s.so.1-12.1.1+git287-1.1.x86_64.debug
filename=/usr/lib/debug/usr/aarch64-suse-linux/sys-root/lib64/libgcc_s.so.1-12.1.1+git287-1.1.x86_64.debug
r=0x7fff740548c0
...
[Thu 11 Aug 2022 08:16:43 PM GMT] (22289/22319):
RETURN/usr/lib/debug/usr/aarch64-suse-linux/sys-root/lib64/libgcc_s.so.1-12.1.1+git287-1.1.x86_64.debug
r=0x7fff740548c0
So the problem is somehow related to fdcache.
@@ -1743,7 +1743,10 @@ handle_buildid_r_match (bool internal_req_p,
continue;
if (fdcache.probe (b_source0, fn)) // skip if already interned
+ {
+ obatched(clog) << "SKIPPING due to probe=" << b_source1 << "
filename=" << fn << " r=" << r << endl;
continue;
+ }
// extract this file to a temporary file