Compare commits

...
14 Commits
16 ... 22
Author SHA1 Message Date
Patrick McCarty 07a4c3d305 Bump version for release
This release fixes the handling of a server HTTP 304 response, now
treating it as non-fatal.
2015-10-02 12:15:07 -07:00
Patrick McCarty ab0e59628f Treat HTTP 304 codes as non-fatal
We set the If-Modified-Since header field for each GET request, and if
the condition fails, the server will respond with HTTP 304.

The 304 means the cached debuginfo is up-to-date, not requiring a fresh
download. Since this condition is non-fatal, avoid swapping the download
URLs in this case.
2015-10-02 12:15:02 -07:00
Patrick McCarty af4a3f64f0 Update gitignore 2015-10-02 10:36:39 -07:00
Patrick McCarty 8c65e96479 Bump version for release
This release fixes some compiler warnings and the distcheck target, and
addresses a recurrent 404 issue by avoiding a download attempt for
".tar" from the root debuginfo directory.
2015-09-29 12:32:23 -07:00
Patrick McCarty 7ea9a50b19 Avoid attempt to download {lib,src}/debug
The associated cache directories in /var/cache/debuginfo/{lib,src}
already exist, and the tar for / is not created on the server, so avoid
downloading it altogether.
2015-09-29 12:25:13 -07:00
Patrick McCarty e16ab76926 Refresh version in configure.ac
The configure.ac version was falling behind the tagged version...
2015-09-28 14:02:03 -07:00
Patrick McCarty 090cb27a34 Fix distcheck target
Adding two --with-* configure options for the systemd pkgconfig-defined
variables gives opportunity for distcheck to succeed; the variables use
hardcoded paths to /usr/lib/systemd/... without a PREFIX, so the paths
need to be relocated to $dc_install_base, a variable distcheck uses for
the normal variables that begin with PREFIX.
2015-09-28 13:52:24 -07:00
Patrick McCarty cbaf943fca Convert server to use modern Glib Thread API
Using a GStaticMutex and associated functions are deprecated, since
a GMutex can be statically allocated now (as of glib 2.32).
2015-09-25 14:20:22 -07:00
Patrick McCarty 32ae400e7d Update gitignore 2015-09-25 14:19:56 -07:00
Patrick McCarty 82f03f8e22 Fix build warning for implicitly included header 2015-09-25 14:00:33 -07:00
Arjan van de Ven c1f45d9f3c https 2015-07-20 23:02:09 -04:00
Arjan van de Ven bcff8fae39 default to the other server for now 2015-04-24 17:55:53 -04:00
Arjan van de Ven 66bab25bcd implement multi-url setup 2015-03-23 14:45:00 -04:00
Arjan van de Ven 49ac392f01 move logging up 2015-03-23 14:37:26 -04:00
5 changed files with 53 additions and 14 deletions
+4
View File
@@ -4,10 +4,12 @@ clr_debug_fuse
clr_debug_daemon clr_debug_daemon
clr_debug_prepare clr_debug_prepare
.deps/ .deps/
.dirstamp
Makefile Makefile
Makefile.in Makefile.in
aclocal.m4 aclocal.m4
autom4te.cache/ autom4te.cache/
compile
config.h config.h
config.h.in config.h.in
config.log config.log
@@ -18,3 +20,5 @@ install-sh
missing missing
stamp-h1 stamp-h1
*.tar.gz *.tar.gz
tags
cscope.*
+4
View File
@@ -1,5 +1,9 @@
EXTRA_DIST = COPYING clr_debug_fuse.service clr_debug_daemon.service debuginfo.conf EXTRA_DIST = COPYING clr_debug_fuse.service clr_debug_daemon.service debuginfo.conf
DISTCHECK_CONFIGURE_FLAGS = \
--with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir) \
--with-systemdtmpfilesdir=$$dc_install_base/$(tmpfilesdir)
bin_PROGRAMS = clr_debug_fuse clr_debug_daemon clr_debug_prepare bin_PROGRAMS = clr_debug_fuse clr_debug_daemon clr_debug_prepare
clr_debug_fuse_SOURCES = src/fuse.c src/client.c clr_debug_fuse_SOURCES = src/fuse.c src/client.c
+13 -5
View File
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_PREREQ([2.66]) AC_PREREQ([2.66])
AC_INIT(clr-debug-info, 11, arjan@linux.intel.com) AC_INIT(clr-debug-info, 22, arjan@linux.intel.com)
AM_INIT_AUTOMAKE([foreign -Wall -W subdir-objects]) AM_INIT_AUTOMAKE([foreign -Wall -W subdir-objects])
AM_SILENT_RULES([yes]) AM_SILENT_RULES([yes])
AC_PROG_CC AC_PROG_CC
@@ -13,11 +13,19 @@ PKG_CHECK_MODULES([curl], [libcurl])
PKG_CHECK_MODULES([fuse], [fuse]) PKG_CHECK_MODULES([fuse], [fuse])
PKG_CHECK_MODULES([SYSTEMD], [systemd]) PKG_CHECK_MODULES([SYSTEMD], [systemd])
tmpfilesdir=`pkg-config --variable tmpfilesdir systemd` dir=""
AC_SUBST(tmpfilesdir) AC_ARG_WITH([systemdsystemunitdir], AS_HELP_STRING([--with-systemdsystemunitdir=DIR],
[path to systemd system service dir @<:@default=/usr/lib/systemd/system@:>@]), [dir=${withval}],
[dir="$($PKG_CONFIG --variable=systemdsystemunitdir systemd)"])
test -z "${dir}" && dir=/usr/lib/systemd/system
AC_SUBST(systemdsystemunitdir, [${dir}])
systemdsystemunitdir=`pkg-config --variable systemdsystemunitdir systemd` dir=""
AC_SUBST(systemdsystemunitdir) AC_ARG_WITH([systemdtmpfilesdir], AS_HELP_STRING([--with-systemdtmpfilesdir=DIR],
[path to systemd tmpfiles dir @<:@default=/usr/lib/tmpfiles.d@:>@]), [dir=${withval}],
[dir="$($PKG_CONFIG --variable=tmpfilesdir systemd)"])
test -z "${dir}" && dir=/usr/lib/tmpfiles.d
AC_SUBST(tmpfilesdir, [${dir}])
AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([Makefile])
AC_OUTPUT AC_OUTPUT
+1
View File
@@ -34,6 +34,7 @@ Original copyright notice follows:
#include <malloc.h> #include <malloc.h>
#include <fuse.h> #include <fuse.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
+31 -9
View File
@@ -41,7 +41,10 @@
#include <curl/curl.h> #include <curl/curl.h>
#include <glib.h> #include <glib.h>
GStaticMutex dupes_mutex = G_STATIC_MUTEX_INIT; static GMutex dupes_mutex;
char *urls[2] = {"https://debuginfo.clearlinux.org/debuginfo/", "http://debuginfo.fenrus.org/debuginfo/" };
int urlcounter = 1;
static GHashTable *hash; static GHashTable *hash;
@@ -50,7 +53,7 @@ static int avoid_dupes(const char *url)
{ {
int retval = 0; int retval = 0;
void *value; void *value;
g_static_mutex_lock(&dupes_mutex); g_mutex_lock(&dupes_mutex);
if (hash == NULL) if (hash == NULL)
hash = g_hash_table_new(g_str_hash, g_str_equal); hash = g_hash_table_new(g_str_hash, g_str_equal);
@@ -68,7 +71,7 @@ static int avoid_dupes(const char *url)
g_hash_table_replace(hash, strdup(url), data); g_hash_table_replace(hash, strdup(url), data);
} }
g_static_mutex_unlock(&dupes_mutex); g_mutex_unlock(&dupes_mutex);
return retval; return retval;
} }
@@ -119,6 +122,15 @@ static int curl_get_file(const char *url, const char *prefix, time_t timestamp)
fflush(file); fflush(file);
// printf("HTTP return code is %i\n", ret); // printf("HTTP return code is %i\n", ret);
/* HTTP 304 is returned if (a) the cached debuginfo has the same
* timestamp or is newer than that on the server and (b) we haven't
* already added the URL to the hash table. So, the first crash for a
* boot may result in a 304 if the debuginfo had been downloaded in a
* previous boot.
*/
if (ret != 200 && ret != 404 && ret != 304)
urlcounter++;
if (ret == 200) { if (ret == 200) {
char *command = NULL; char *command = NULL;
// printf("Filename is %s\n", filename); // printf("Filename is %s\n", filename);
@@ -185,6 +197,14 @@ static void *server_thread(void *arg)
*path = 0; *path = 0;
path++; path++;
/* GDB and elfutils both stat /usr/lib/debug directly when looking up
* debuginfo, so avoid the download for "/.tar"; the associated cache
* directories already exist by this point.
*/
if (strlen(path) == 1 && strcmp(path, "/") == 0) {
close(fd);
return NULL;
}
if (strstr(path, "..") || strstr(prefix, "..") || strstr(path, "'") || strstr(path, ";")) { if (strstr(path, "..") || strstr(prefix, "..") || strstr(path, "'") || strstr(path, ";")) {
close(fd); close(fd);
@@ -197,7 +217,7 @@ static void *server_thread(void *arg)
return NULL; return NULL;
} }
url = NULL; url = NULL;
if (asprintf(&url, "http://debuginfo.clearlinux.org/debuginfo/%s%s.tar", prefix, path) < 0) { if (asprintf(&url, "%s%s%s.tar", urls[urlcounter % 2], prefix, path) < 0) {
close(fd); close(fd);
return NULL; return NULL;
} }
@@ -205,17 +225,19 @@ static void *server_thread(void *arg)
// printf("Getting url %s %i:%06i\n", url, before.tv_sec, before.tv_usec); // printf("Getting url %s %i:%06i\n", url, before.tv_sec, before.tv_usec);
ret = curl_get_file(url, prefix, timestamp); ret = curl_get_file(url, prefix, timestamp);
/* tell the other side we're done with the download */ if (ret != 200)
write(fd, "ok", 3); printf("Request for %s resulted in error %i\n", url, ret);
close(fd);
gettimeofday(&after, NULL); gettimeofday(&after, NULL);
if (timedelta(before, after) > 0.6) if (timedelta(before, after) > 0.6)
printf("Request for %s took %5.2f seconds (%i - %i)\n", url, printf("Request for %s took %5.2f seconds (%i - %i)\n", url,
after.tv_sec - before.tv_sec + (1.0*after.tv_usec - before.tv_usec) / 1000000.0, ret, (int)timestamp); after.tv_sec - before.tv_sec + (1.0*after.tv_usec - before.tv_usec) / 1000000.0, ret, (int)timestamp);
if (ret != 200) /* tell the other side we're done with the download */
printf("Request for %s resulted in error %i\n", url, ret); write(fd, "ok", 3);
close(fd);
free(url); free(url);
return NULL; return NULL;
} }