debuginfod: only update database stats once per groom
[platform/upstream/elfutils.git] / debuginfod / ChangeLog
1 2021-04-15  Frank Ch. Eigler <fche@redhat.com>
2
3         * debuginfod.cxx (groom): Only update database stats once.
4
5 2021-04-15  Frank Ch. Eigler <fche@redhat.com>
6
7         * debuginfod.cxx (elf_classify): Recognize symtab-only stripped files
8         like fedora's libicudata as debuginfo files.
9
10 2021-03-30  Frank Ch. Eigler <fche@redhat.com>
11
12         * debuginfod.cxx (main): Set child thread names.
13
14 2021-03-07  Timm Bäder <tbaeder@redhat.com>
15
16         * debuginfod-client.c (debuginfod_query_server): Tweak
17         double/long clamping arithmetic to avoid UB and warnings.
18
19 2021-02-25  Frank Ch. Eigler <fche@redhat.com>
20
21         * debuginfod.cxx (handler_cb): Filter webapi for bad
22         artifacttype keywords early for metric hygiene.
23
24 2021-02-14  Frank Ch. Eigler <fche@redhat.com>
25
26         * debuginfod.cxx (main -U): Use bsdtar unconditionally.  Also map
27         the debian-compatible .ipk (openembedded distro family) to same.
28
29 2021-02-04  Frank Ch. Eigler <fche@redhat.com>
30
31         PR27092 low-memory handling
32         * debuginfod.cxx (fdcache_mintmp): New parameter, with cmd-line option.
33         (parse_opt): Parse it.
34         (main): Default it.
35         (statfs_free_enough_p): New function.
36         (libarchive_fdcache::*): Call it to trigger emergency fdcache flush.
37         (thread_main_scanner): Call it to report filesystem fullness metrics.
38         (groom): Ditto.
39         (set/add_metric): Take double rather than int64_t values.
40         (archive_exception): Propagate suberror to metric label.
41         (main): Detect pthread creation fatal errors properly.
42
43 2021-02-02  Frank Ch. Eigler <fche@redhat.com>
44
45         PR27323
46         * debuginfod.cxx (dbq): New read-only database connection for queries
47         only.
48         (signal_handler): Interrupt it.
49         (main): Open / close it.
50         (handle_buildid): Use it for webapi queries only.
51         (database_stats_report): Make more interruptible.  Report sqlite3
52         operation times to the prometheus metrics.
53         (groom): Make more interruptible.
54         (thread_main_fts_source_paths, thread_main_groom): Ensure
55         state/progress metrics are fresh even in case of exceptions.
56
57 2020-12-20  Dmitry V. Levin  <ldv@altlinux.org>
58
59         * .gitignore: New file.
60
61 2020-12-12  Dmitry V. Levin  <ldv@altlinux.org>
62
63         * debuginfod-client.c (debuginfod_query_server): Fix spelling typos in
64         comments.
65         * debuginfod.cxx: Likewise.
66         (parse_opt): Fix spelling typos in error diagnostics.
67
68 2020-12-08  Dmitry V. Levin  <ldv@altlinux.org>
69
70         * Makefile.am [LIBDEBUGINFOD]: Create libdebuginfod.so.1 first, turn
71         libdebuginfod.so into symlink.
72
73 2020-11-30  Dmitry V. Levin  <ldv@altlinux.org>
74
75         * Makefile.am (libdebuginfod.so): Replace $@.$(VERSION) with
76         $(LIBDEBUGINFOD_SONAME).
77         (install, uninstall, MOSTLYCLEANFILES): Replace
78         libdebuginfod.so.$(VERSION) with $(LIBDEBUGINFOD_SONAME).
79         (VERSION): Remove.
80         * debuginfod.h: Rename to ...
81         * debuginfod.h.in ... this.
82         (DEBUGINFOD_SONAME): New macro.
83
84 2020-11-30  Dmitry V. Levin  <ldv@altlinux.org>
85
86         * Makefile.am (libdebuginfod.so$(EXEEXT)): Drop $(EXEEXT) suffix.
87
88 2020-11-25  Frank Ch. Eigler  <fche@redhat.com>
89
90         * debuginfod.cxx (step_ok_done): Correct typo in prom metric label.
91
92 2020-11-25  Frank Ch. Eigler  <fche@redhat.com>
93
94         * debuginfod.cxx (tmp_ms_metric): Switch from gettimeofday to
95         clock_gettime(CLOCK_MONOTONIC) for time-interval measurements.
96         (handler_cb, scan_source_paths, groom): Ditto.
97
98 2020-11-23  Frank Ch. Eigler  <fche@redhat.com>
99
100         * debuginfod.cxx (tmp_ms_metric): New class for RAII timing metrics.
101         (sqlite_ps::reset, step*): Call it to track sqlite3 performance.
102         (sqlite_exception ctor): Increment sqlite3 error_count.
103
104 2020-11-23  Mark Wielaard  <mark@klomp.org>
105
106         * debuginfod-client.c (debuginfod_query_server): Initialize
107         struct handle_data errbuf to the empty string.
108
109 2020-11-11  Mark Wielaard  <mark@klomp.org>
110
111         * debuginfod-client.c (debuginfod_set_verbose_fd): New function.
112         (struct debuginfod_client): Add verbose_fd.
113         (struct handle_data): Add errbuf.
114         (debuginfod_query_server): Produce verbose output when
115         debuginfod_client verbose_fd is set. Only clear old data and set
116         default_headers when any work is done. Always goto out when setting
117         rc to an error value. Use CURLOPT_ERRORBUFFER to get more error
118         output when verbose output is requested.
119         * debuginfod.h (DEBUGINFOD_VERBOSE_ENV_VAR): New.
120         (debuginfod_set_verbose_fd): Added.
121         * debuginfod-find.c (parse_opt): Set debuginfod_set_verbose_fd on -v.
122         * bdebuginfod.map (ELFUTILS_0.183): New section, add
123         debuginfod_set_verbose_fd.
124
125 2020-11-21  Mark Wielaard  <mark@klomp.org>
126
127         * debuginfod.cxx (handle_root): New function.
128         (handler_cb): Handle "/" and report url1 in webapi error.
129
130 2020-11-11  Mark Wielaard  <mark@klomp.org>
131
132         * debuginfod-find.c (progressfn): Use clock_gettime to print Progress
133         at most 5 times a second.
134
135 2020-11-19  Frank Ch. Eigler  <fche@redhat.com>
136
137         * debuginfod.cxx (tmp_inc_metric): New class.
138         (handler_cb): Use it to track webapi operations.
139
140 2020-11-01  Érico N. Rolim  <erico.erc@gmail.com>
141
142         * debuginfod-client.c (debuginfod_init_cache): Use ACCESSPERMS for
143         mkdir, DEFFILEMODE for open with O_CREAT.
144
145 2020-11-01  Érico N. Rolim  <erico.erc@gmail.com>
146
147         * debuginfod.cxx: include libintl.h.
148
149 2020-11-01  Érico N. Rolim  <erico.erc@gmail.com>
150
151         * Makefile.am (debuginfod_LDADD): Add argp_LDADD and fts_LIBS.
152         (debuginfod_find_LDADD): Likewise.
153         (libdebuginfod_so_LDLIBS): Add fts_LIBS.
154
155 2020-10-31  Frank Ch. Eigler  <fche@redhat.com>
156
157         * debuginfod.cxx (scan_source_file, scan_archive_file): Add new scanned_bytes_total,
158         scanned_files_total metrics.
159         (archive_classify): Exit early if interrupted.
160         (scan_source_paths): Perform realpath/regex checks only on FTS_F files.
161         Tweak metrics.
162
163 2020-10-30  Frank Ch. Eigler  <fche@redhat.com>
164
165         PR26775 cont'd.
166         * debuginfod.cxx (thread_main_scanner): Ensure control doesn't
167         leave infinite loop until program exit, even if SIGUSR2.
168         (scan_source_paths): Have traverser clean scanq on
169         SIGUSR2.  Emit additional traversed_total metrics.
170         (groom): Emit additional groomed_total metrics.
171         (thread_main_groom): Restore previous thread_work_total
172         metric.
173
174 2020-10-29  Frank Ch. Eigler  <fche@redhat.com>
175
176         PR26775
177         * debuginfod.cxx (forced_*_count): Make these global.
178         (runq::clear): New function.
179         (thread_main_scanner): Check for pending SIGUSR2; interrupt.
180         (scan_source_paths): Check for pending SIGUSR2; interrupt.
181         (groom): Report prometheus stats before groom also.  Check for
182         pending SIGUSR1; interrupt.  Increment thread_work_total for
183         each file scanned, not the entire cycle.
184
185 2020-10-29  Frank Ch. Eigler  <fche@redhat.com>
186
187         PR26810
188         * debuginfod.cxx (handle_buildid_*_match): Throw exceptions for
189         more lower level libc errors.
190         (handle_buildid_match): Catch & report exceptions but return 0
191         for continued iteration in the caller.
192
193 2020-10-25  Mark Wielaard  <mark@klomp.org>
194
195         * debuginfod-client.c (debuginfod_query_server): Translate
196         CURLE_PEER_FAILED_VERIFICATION to ECONNREFUSED.
197
198 2020-10-20  Frank Ch. Eigler  <fche@redhat.com>
199
200         PR26756: more prometheus metrics
201         * debuginfod.cxx (*_exception): Add counters for error occurrences.
202         (fdcache::*): Add counters for fdcache operations and status.
203         (fdcache::set_metric): New fn for overall stat counts.
204         (fdcache::limit): ... allow metric-less use from dtors.
205
206 2020-10-20  Frank Ch. Eigler  <fche@redhat.com>
207
208         * debuginfod.cxx (handle_buildid*): Add a parameter for detecting
209         internally-originated lookups for dwz resolution.
210
211 2020-09-18  Frank Ch. Eigler <fche@redhat.com>
212
213         * debuginfod.cxx (scan_source_file, archive_classify): Store only
214         canonicalized file names in sdef & sref records in the database.
215
216 2020-09-08  Mark Wielaard  <mark@klomp.org>
217
218         * Makefile.am (BUILD_STATIC): Include libcurl_LIBS in libdebuginfod
219         when NOT DUMMY_LIBDEBUGINFOD.
220
221 2020-09-16  Mark Wielaard  <mark@klomp.org>
222
223         * debuginfod-find.c: Fix license block comment.
224
225 2020-09-15  Mark Wielaard  <mark@klomp.org>
226
227         * debuginfod-find.c (main): Use dwelf_elf_begin.
228
229 2020-07-03  Alice Zhang <alizhang@redhat.com>
230
231         * debuginfod-client.c (debuginfod_query_server): Use strncasecmp
232         to compare effective_url. Try CURLINFO_SCHEME as fallback.
233
234 2020-06-19  Mark Wielaard  <mark@klomp.org>
235
236         * Makefile.am (bin_PROGRAMS): Guard with DEBUGINFOD and
237         LIBDEBUGINFOD.
238         (debuginfod_LDADD): Remove libcurl.
239         (libdebuginfod): When static and DUMMY_LIBDEBUGINFO remove libcurl.
240         (noinst_LIBRARIES): Guard with LIBDEBUGINFOD.
241         (AM_CPPFLAGS): Add -Wno-unused-parameter when DUMMY_LIBDEBUGINFOD.
242         (pkginclude_headers): Guard with LIBDEBUGINFOD
243         (libdebuginfod_so_LIBS): Likewise.
244         (+libdebuginfod_so_LDLIBS): Likewise.
245         (install): Likewise.
246         (uninstall): Likewise.
247         * debuginfod-client.c: Include dummy functions when
248         DUMMY_LIBDEBUGINFOD.
249         * debuginfod.cxx: Remove curl.h include.
250
251 2020-06-16  Mark Wielaard  <mark@klomp.org>
252
253         * debuginfod-client.c (debuginfod_query_server): Check malloc.
254         Move curl_multi_init call before handle_data malloc call.
255
256 2020-06-16  Mark Wielaard  <mark@klomp.org>
257
258         * debuginfod-client.c (debuginfod_query_server): Replace sizeof
259         build_id_bytes check with strlen build_id check.
260
261 2020-06-16  Mark Wielaard  <mark@klomp.org>
262
263         * debuginfod-client.c (debuginfod_query_server): Increase suffix
264         array and prepare having to escape 1 character with 2.
265
266 2020-06-16  Mark Wielaard  <mark@klomp.org>
267
268         * debuginfod-client.c (debuginfod_clean_cache): Handle failing
269         fopen (interval_path).
270
271 2020-03-29  Mark Wielaard  <mark@klomp.org>
272
273         * debuginfod-client.c (debuginfod_add_http_header): Check header
274         contains precisely one colon that isn't the first or last char.
275
276 2020-03-29  Frank Ch. Eigler  <fche@redhat.com>
277
278         * debuginfod-client.c (struct debuginfod_client): Add a flag field
279         for progressfn printing.
280         (default_progressfn): Set it if printing \rsomething.
281         (debuginfod_end): Terminate with \n if flag set, i.e., only if the
282         default_progressfn was actually called.
283
284 2020-03-27  Mark Wielaard  <mark@klomp.org>
285
286         * debuginfod.cxx (parse_opt): Check port is not zero.
287
288 2020-03-28  Frank Ch. Eigler  <fche@redhat.com>
289
290         * debuginfod.cxx (handle_buildid_r_match): During archive
291         extraction / fdcache prefetching, set the mtime of each
292         file in the cache.
293
294 2020-03-27  Frank Ch. Eigler  <fche@redhat.com>
295
296         * debuginfod-find.c (main): Extract buildid from /binary/ if
297         given instead of hex string.
298         * Makefile.am: Add elfutils library prereqs for debuginfod-find.
299
300 2020-03-24  Frank Ch. Eigler  <fche@redhat.com>
301
302         * debuginfod.h, libdebuginfod.map: New functions for _add_url_header.
303         * debuginfod-client.c (struct debuginfod_client): Add headers fields.
304         (debuginfod_add_http_header): New client api to add outgoing headers.
305         (add_default_headers): Renamed from add_extra_headers, skip if flag.
306         (debuginfod_query_server): Pass accumulated headers to libcurl.
307         (debuginfod_end): Clean accumulated headers.
308         (debuginfod_find_*): Add default headers at this point.
309         * debuginfod.cxx (handle_buildid): Add conn pointer.  Use it to relay
310         incoming UA and XFF headers to federated upstream debuginfods.
311
312 2020-03-26  Frank Ch. Eigler <fche@redhat.com>
313
314         * debuginfod.cxx (handler_cb): Export two families of metrics for
315         prometheus traffic analysis: response times and data amounts.
316
317 2020-03-26  Frank Ch. Eigler <fche@redhat.com>
318
319         * debuginfod.cxx (parse_opt): For -U, prefer dpkg-deb
320         after all if access(3)-able, fallback to bsdtar.
321
322 2020-03-25  Frank Ch. Eigler <fche@redhat.com>
323
324         * debuginfod.cxx (parse_opt): Associate a bsdtar subshell with
325         the .deb & .ddeb extensions, instead of dpkg-deb.
326
327 2020-03-26  Frank Ch. Eigler  <fche@redhat.com>
328
329         * debuginfod-client.c (debuginfod_query_server): Don't
330         set CURLOPT_PATH_AS_IS on old curl.  Mostly harmless.
331
332 2020-03-24  Frank Ch. Eigler  <fche@redhat.com>
333
334         * debuginfod-client.c (debuginfod_query_server): Set
335         CURLOPT_PATH_AS_IS, to propagate file names verbatim.
336         * debuginfod.cxx (canon_pathname): Implement RFC3986
337         style pathname canonicalization.
338         (handle_buildid): Canonicalize incoming webapi source
339         paths, accept either one.
340         (scan_source_file, archive_classify): Store both
341         original and canonicalized dwarf-source file names.
342
343 2020-03-24  Frank Ch. Eigler  <fche@redhat.com>
344
345         * debuginfod.cxx (handle_buildid): In case of federated fallback
346         queries, handle errors analogously to local ENOENT/404.
347         (handle_metrics): Return a size-of-response value.
348         (handler_cb): Add code to time entire application-side processing
349         stage + response sizes + http codes, so as to emit a complete
350         httpd-flavoured log line for each webapi request.
351
352 2020-03-24  Frank Ch. Eigler  <fche@redhat.com>
353
354         * debuginfod-client.c (debuginfod_query_server): Print the
355         default_progressfn terminating \n message only if that progressfn
356         is actually set.
357
358 2020-03-24  Frank Ch. Eigler  <fche@redhat.com>
359
360         * debuginfod-find.c (main): Correct /source full-pathness check for
361         "debuginfod-find -v source deadbeef /pathname" case.
362
363 2020-03-22  Frank Ch. Eigler  <fche@redhat.com>
364
365         * debuginfod-client.c (struct debuginfod_client): Add url field.
366         (struct handle_data): Add client field as backpointer.
367         (debuginfod_write_callback): Compute & save URL.
368         (default_progressfn): Print front pieces of the URL.
369         (debuginfod_query_server): Clear URL and cleanup after progressfn.
370         * debuginfod-find.c (main): Print URL at transfer conclusion.
371
372 2020-03-22  Frank Ch. Eigler  <fche@redhat.com>
373
374         * debuginfod.h, libdebuginfod.map: New functions for _get/set_user().
375         * debuginfod-client.c: Implement them.
376         * debuginfod-find.c: Include a token call just for testing them.
377
378 2020-03-03  Aaron Merey  <amerey@redhat.com>
379
380         * debuginfod-client.c (debuginfod_query_server): Update
381         cache_path even when new default path already exists.
382
383 2020-02-27  Aaron Merey  <amerey@redhat.com>
384
385         * debuginfod-client.c (xalloc_str): New macro. Call
386         asprintf with error checking.
387         (debuginfod_query_server): Use XDG_CACHE_HOME as a default
388         cache location if it is set. Replace snprintf with xalloc_str.
389
390 2020-02-26  Konrad Kleine <kkleine@redhat.com>
391
392         * debuginfod-client.c (debuginfod_query_server): Handle curl's
393         response code correctly when DEBUGINFOD_URLS begin with file://
394
395 2020-02-25  Frank Ch. Eigler  <fche@redhat.com>
396
397         * debuginfod.cxx (parse_opt): Treat -R as if -Z.rpm .
398
399 2020-02-25  Frank Ch. Eigler  <fche@redhat.com>
400
401         * debuginfod.cxx (fdcache_prefetch): New parameter.
402         (parse_opt): Parse it.
403         (main): Default it.
404         (fdcache::fd_size_mb): Change to double for accuracy.
405         (fdcache::probe): New function.
406         (fdcache::intern): New option to intern at end of LRU.
407         (fdcache::lookup): Clean fdcache.
408         (handle_buildid_r_match): Implement multi-stage archive
409         parsing, with optional prefetching of extracted contents
410         into the fdcache.
411
412 2020-02-19  Aaron Merey  <amerey@redhat.com>
413
414         * debuginfod-client.c (debuginfod_clean_cache): Restrict
415         cleanup to client-pattern files.
416
417 2020-02-05  Frank Ch. Eigler  <fche@redhat.com>
418
419         * debuginfod.cxx (argp options): Add -Z option.
420         (canonicalized_archive_entry_pathname): New function for
421         distro-agnostic file name matching/storage.
422
423 2020-01-22  Frank Ch. Eigler  <fche@redhat.com>
424
425         * debuginfod.cxx (dwarf_extract_source_paths): Don't print
426         "skipping hat" messages at verbosity <=3, too noisy.
427
428 2020-01-19  Frank Ch. Eigler  <fche@redhat.com>
429
430         * debuginfod.cxx (scanq): Rework to let groomer/fts threads
431         synchronize with an empty workqueue, and lock out workqueue
432         consumers.
433         (thread_groom): Adopt new scanq idle APIs to lock out scanners.
434         (thread_main_fts_source_paths): Adopt new scanq idler API to
435         avoid being restarted while scanners haven't even finished yet.
436         (thread_main_*): Increment thread_work_total metric only after
437         a work cycle is completed, not when it begins.
438
439 2020-01-18  Frank Ch. Eigler  <fche@redhat.com>
440
441         * debuginfod.cxx (thread_main_scanner): Handle empty source_paths[].
442
443 2020-01-11  Frank Ch. Eigler  <fche@redhat.com>
444
445         * debuginfod.cxx (libarchive_fdcache): New class/facility to own a
446         cache of temporary files that were previously extracted from an
447         archive.  If only it could store just unlinked fd's instead of
448         filenames.
449         (handle_buildid_r_match): Use it to answer dwz/altdebug and webapi
450         requests.
451         (groom): Clean it.
452         (main): Initialize the cache control parameters from heuristics.
453         Use a consistent tmpdir for these and tmp files elsewhere.
454
455 2020-01-11  Frank Ch. Eigler  <fche@redhat.com>
456
457         * debuginfod.cxx (conninfo): Print User-Agent and X-Forwarded-For
458         request headers, after mild safety-censorship (for easier machine
459         processing).
460
461 2020-01-11  Frank Ch. Eigler  <fche@redhat.com>
462
463         * debuginfod.cxx: Rework threading model.
464         (workq): New class for concurrent work-queue.
465         (semaphore): Removed class, now unused.
466         (scan_source_file_path): Rework into ...
467         (scan_source_file): New function.
468         (thread_main_scan_source_file_path): Nuke.
469         (scan_source_archive_path): Rework into ...
470         (scan_archive_file): New function.
471         (thread_main_scanner): New function for scanner threads.
472         (thread_main_fts_source_paths): New function for traversal thread.
473         (scan_source_paths): ... doing this.
474         (thread_groom): Tweak metrics for consistency.
475         (main): Start 1 traversal and N scanner threads if needed.
476
477 2019-01-02  Mark Wielaard  <mark@klomp.org>
478
479         * debuginfod.cxx (default_connect_timeout): Removed.
480         (default_transfer_timeout): Removed.
481         (default_timeout): New. Default to 90 seconds.
482         (debuginfod_query_server): Parse server_timeout_envvar as one number.
483         Set as CURLOPT_LOW_SPEED_TIME, with CURL_OPT_LOW_SPEED_LIMITE as 100K.
484
485 2020-01-09  Frank Ch. Eigler  <fche@redhat.com>
486
487         * debuginfod-client.c (add_extra_headers): New function,
488         based on mjw's draft.
489         (debuginfod_query_server): Call it.
490
491 2019-12-22  Frank Ch. Eigler  <fche@redhat.com>
492
493         * debuginfod.cxx (*_rpm_*): Rename to *_archive_* throughout.
494         (scan_archives): New read-mostly global to identify archive
495         file extensions and corresponding extractor commands.
496         (parse_opt): Handle new -U flag.
497
498 2019-12-19  Frank Ch. Eigler  <fche@redhat.com>
499
500         * debuginfod-client.c (default_progressfn): New function.
501         (debuginfod_begin): Use it if $DEBUGINFOD_PROGRESS set.
502         (server_timeout): Bump to 30 seconds.
503         (debuginfod_query_server): Call progressfn -after- rather than
504         before curl ops, to make it likely that a successful transfer
505         results in final a=b call.  Tweak cleanup sequence.
506         * debuginfod.h: Document $DEBUGINFOD_PROGRESS name.
507
508 2019-12-09  Mark Wielaard  <mark@klomp.org>
509
510         * debuginfod-client.c (debuginfod_query_server): Check
511         server_urls_envvar early.
512
513 2019-12-03  Mark Wielaard  <mark@klomp.org>
514
515         * debuginfod-client.c (debuginfod_query_server): Use separate
516         local variables for CURLcode curl_res and CURLMcode curlm_res.
517
518 2019-11-26  Mark Wielaard  <mark@klomp.org>
519
520         * Makefile.am (BUILD_STATIC): Add needed libraries for libdw and
521         libdebuginfod.
522
523 2019-11-25  Frank Ch. Eigler  <fche@redhat.com>
524
525         * debuginfod.cxx (groom): Add a sqlite3_db_release_memory()
526         at the end of periodic grooming to try to shrink the process.
527
528 2019-11-24  Mark Wielaard  <mark@klomp.org>
529
530         * debuginfod.cxx (test_webapi_sleep): Removed.
531         (handler_cb): Don't check test_webapi_sleep and sleep.
532         (main): Don't set test_webapi_sleep.
533
534 2019-11-24  Mark Wielaard  <mark@klomp.org>
535
536         * debuginfod.cxx (add_metric): New function.
537         (scan_source_file_path): Record metrics for
538         found_executable_total, found_debuginfo_total and
539         found_sourcerefs_total.
540         (scan_source_rpm_path): Likewise.
541
542 2019-11-07  Frank Ch. Eigler  <fche@redhat.com>
543
544         * debuginfod.cxx: Add /metrics endpoint.  Add numerous
545         calls to new functions inc_metric/set_metric to populate
546         threadsafe map containing stats.  Add http content-type
547         response headers throughout.
548         (thread_main_*): Simplify counter/timer flow.
549         (main): Reorder web service shutdown to leave http running
550         as long as possible.
551         * debuginfod.8: Document it, add security caution.
552
553 2019-11-06  Frank Ch. Eigler  <fche@redhat.com>
554
555         * debuginfod.cxx: Add new -L (symlink-following) mode.
556         * debuginfod.8: Document it.
557
558 2019-11-04  Frank Ch. Eigler  <fche@redhat.com>
559
560         * debuginfo-client.c (debuginfod_set_progressfn): New function
561         for progress/interrupt callback.
562         (debuginfod_clean_cache, debuginfod_query_server): Call it.
563         * debuginfo.h: Declare it.
564         * debuginfod_set_progressfn.3, *_find_debuginfo.3: Document it.
565         * Makefile.am: Install it.
566         * libdebuginfod.map: Export it all under ELFUTILS_0.178 symversion.
567
568         * debuginfod-find.c: Add -v option to activate progress cb.
569         * debuginfod-find.1: Document it.
570         * debuginfod.cxx: Add $DEBUGINFOD_TEST_WEBAPI_SLEEP env var
571         to insert sleep in webapi callbacks, to help manual testing.
572
573 2019-10-28  Frank Ch. Eigler  <fche@redhat.com>
574
575         * debuginfod.cxx: New file: debuginfod server.
576         * debuginfod.8: New file: man page.
577         * Makefile.am: Build it.
578
579 2019-10-28  Aaron Merey  <amerey@redhat.com>
580
581         * debuginfod-client.c: New file: debuginfod client library.
582         * debuginfod.h: New file: header for same.
583         * libdebuginfod.map: New file: govern its solib exports.
584         * debuginfod-find.c: New file: command line frontend.
585         * debuginfod-find.1, debuginfod_find_source.3,
586         debuginfod_find_executable.3, debuginfod_find_debuginfo.3:
587         New man pages.