summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2021-08-28 20:25:56 +0200
committerMark Wielaard <mark@klomp.org>2021-08-28 20:25:56 +0200
commit61554a292f753032490c349fedf47c4fb461e3ea (patch)
treed03aa2e37a8ee29b409124918f12180cec6b4f9d
parent17a9b1303e533c13aac6550844bdd68c669091bf (diff)
downloadelfutils-61554a292f753032490c349fedf47c4fb461e3ea.tar.gz
debuginfod: Turn -d ":memory:" into -d "file::memory:?cache=shared"
debuginfod opens the database twice, once in read/wrote and once in read-only mode. This means the magic ":memory:" in-memory database cannot be used as is because the two connections don't really share the underlying database. Fix this by turning ":memory:" into ":file::memory:?cache=shared" which makes the in-memory database shared. See https://sqlite.org/inmemorydb.html Document this in debuginfod.8 and make some tests use -d :memory: Signed-off-by: Mark Wielaard <mark@klomp.org>
-rw-r--r--debuginfod/ChangeLog5
-rw-r--r--debuginfod/debuginfod.cxx9
-rw-r--r--doc/ChangeLog4
-rw-r--r--doc/debuginfod.86
-rw-r--r--tests/ChangeLog5
-rwxr-xr-xtests/run-debuginfod-find.sh7
6 files changed, 28 insertions, 8 deletions
diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog
index 395af94f..c5459823 100644
--- a/debuginfod/ChangeLog
+++ b/debuginfod/ChangeLog
@@ -1,3 +1,8 @@
+2021-08-28 Mark Wielaard <mjw@redhat.com>
+
+ * debuginfod.cxx (parse_opt): Turn the -d arg ":memory:" into
+ "file::memory:?cache=shared" for the db_path.
+
2021-08-20 Di Chen <dichen@redhat.com>
* debuginfod.cxx (options): Add ARGP_KEY_FORWARDED_TTL_LIMIT.
diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
index 6e182a84..3269f657 100644
--- a/debuginfod/debuginfod.cxx
+++ b/debuginfod/debuginfod.cxx
@@ -483,7 +483,14 @@ parse_opt (int key, char *arg,
switch (key)
{
case 'v': verbose ++; break;
- case 'd': db_path = string(arg); break;
+ case 'd':
+ /* When using the in-memory database make sure it is shareable,
+ so we can open it twice as read/write and read-only. */
+ if (strcmp (arg, ":memory:") == 0)
+ db_path = "file::memory:?cache=shared";
+ else
+ db_path = string(arg);
+ break;
case 'p': http_port = (unsigned) atoi(arg);
if (http_port == 0 || http_port > 65535)
argp_failure(state, 1, EINVAL, "port number");
diff --git a/doc/ChangeLog b/doc/ChangeLog
index d5f34f0f..ada48383 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2021-08-28 Di Chen <dichen@redhat.com>
+
+ * debuginfod.8 (-d): Document ":memory:" as in-memory database.
+
2021-08-20 Di Chen <dichen@redhat.com>
* debuginfod.8: Add --forwarded-ttl-limit=NUM documentation.
diff --git a/doc/debuginfod.8 b/doc/debuginfod.8
index 5b0d793c..f9a418d1 100644
--- a/doc/debuginfod.8
+++ b/doc/debuginfod.8
@@ -117,8 +117,10 @@ file is disposable in the sense that a later rescan will repopulate
data. It will contain absolute file path names, so it may not be
portable across machines. It may be frequently read/written, so it
should be on a fast filesystem. It should not be shared across
-machines or users, to maximize sqlite locking performance. The
-default database file is \%$HOME/.debuginfod.sqlite.
+machines or users, to maximize sqlite locking performance. For quick
+testing the magic string ":memory:" can be used to use an one-time
+memory-only database. The default database file is
+\%$HOME/.debuginfod.sqlite.
.TP
.B "\-D SQL" "\-\-ddl=SQL"
diff --git a/tests/ChangeLog b/tests/ChangeLog
index cbd1c227..3fa7c2e4 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,5 +1,10 @@
2021-08-28 Mark Wielaard <mark@klomp.org>
+ * run-debuginfod-find.sh: Use ":memory:" for the
+ forwarded-ttl-limit tests.
+
+2021-08-28 Mark Wielaard <mark@klomp.org>
+
* run-debuginfod-find.sh: Use clean, separate databases for
forwarded-ttl-limit tests.
diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
index 5d38d625..7515b7cd 100755
--- a/tests/run-debuginfod-find.sh
+++ b/tests/run-debuginfod-find.sh
@@ -824,13 +824,10 @@ done
tempfiles vlog$PORT4 vlog$PORT5
errfiles vlog$PORT4 vlog$PORT5
-# Give each debuginfd its own clean database.
-tempfiles db.$PORT4.sql db.$PORT5.sql
-
-env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT5 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d db.$PORT4.sql --forwarded-ttl-limit 0 -p $PORT4 > vlog$PORT4 2>&1 &
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT5 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 0 -p $PORT4 > vlog$PORT4 2>&1 &
PID5=$!
-env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT4 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d db.$PORT5.sql --forwarded-ttl-limit 1 -p $PORT5 > vlog$PORT5 2>&1 &
+env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT4 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 1 -p $PORT5 > vlog$PORT5 2>&1 &
PID6=$!
wait_ready $PORT4 'ready' 1