[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnunet] branch master updated: use mmap() instead of mallo
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnunet] branch master updated: use mmap() instead of malloc, rename heap->flat as database is persisted in flat file |
Date: |
Sat, 29 Jun 2019 10:19:45 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository gnunet.
The following commit(s) were added to refs/heads/master by this push:
new e96e9584f use mmap() instead of malloc, rename heap->flat as database
is persisted in flat file
e96e9584f is described below
commit e96e9584f2ca6797552fc46bb83e3d10827fad49
Author: Christian Grothoff <address@hidden>
AuthorDate: Sat Jun 29 10:18:44 2019 +0200
use mmap() instead of malloc, rename heap->flat as database is persisted in
flat file
---
src/namestore/.gitignore | 36 +--
src/namestore/Makefile.am | 124 +++++-----
..._api_heap.conf => perf_namestore_api_flat.conf} | 2 +-
...in_namestore_heap.c => plugin_namestore_flat.c} | 273 +++++++++++----------
..._api_heap.conf => test_namestore_api_flat.conf} | 2 +-
...e_heap.conf => test_plugin_namestore_flat.conf} | 2 +-
src/util/disk.c | 2 +-
7 files changed, 230 insertions(+), 211 deletions(-)
diff --git a/src/namestore/.gitignore b/src/namestore/.gitignore
index 5a59afd24..f159cdaff 100644
--- a/src/namestore/.gitignore
+++ b/src/namestore/.gitignore
@@ -68,21 +68,21 @@ test_namestore_api_zone_iteration_stop_sqlite
test_namestore_api_zone_to_name_flat
test_namestore_api_zone_to_name_postgres
test_namestore_api_zone_to_name_sqlite
-test_namestore_api_lookup_nick_heap
-test_namestore_api_lookup_private_heap
-test_namestore_api_lookup_public_heap
-test_namestore_api_lookup_shadow_filter_heap
-test_namestore_api_lookup_shadow_heap
-test_namestore_api_monitoring_existing_heap
-test_namestore_api_monitoring_heap
-test_namestore_api_remove_heap
-test_namestore_api_remove_not_existing_record_heap
-test_namestore_api_store_heap
-test_namestore_api_store_update_heap
-test_namestore_api_zone_iteration_heap
-test_namestore_api_zone_iteration_nick_heap
-test_namestore_api_zone_iteration_specific_zone_heap
-test_namestore_api_zone_iteration_stop_heap
-test_namestore_api_zone_to_name_heap
-test_plugin_namestore_heap
-perf_namestore_api_zone_iteration_heap
+test_namestore_api_lookup_nick_flat
+test_namestore_api_lookup_private_flat
+test_namestore_api_lookup_public_flat
+test_namestore_api_lookup_shadow_filter_flat
+test_namestore_api_lookup_shadow_flat
+test_namestore_api_monitoring_existing_flat
+test_namestore_api_monitoring_flat
+test_namestore_api_remove_flat
+test_namestore_api_remove_not_existing_record_flat
+test_namestore_api_store_flat
+test_namestore_api_store_update_flat
+test_namestore_api_zone_iteration_flat
+test_namestore_api_zone_iteration_nick_flat
+test_namestore_api_zone_iteration_specific_zone_flat
+test_namestore_api_zone_iteration_stop_flat
+test_namestore_api_zone_to_name_flat
+test_plugin_namestore_flat
+perf_namestore_api_zone_iteration_flat
diff --git a/src/namestore/Makefile.am b/src/namestore/Makefile.am
index 25941b4fb..e95add6c7 100644
--- a/src/namestore/Makefile.am
+++ b/src/namestore/Makefile.am
@@ -20,26 +20,26 @@ if USE_COVERAGE
XLIBS = -lgcov
endif
-HEAP_PLUGIN = libgnunet_plugin_namestore_heap.la
+HEAP_PLUGIN = libgnunet_plugin_namestore_flat.la
if HAVE_TESTING
-HEAP_TESTS = test_plugin_namestore_heap \
- test_namestore_api_store_heap \
- test_namestore_api_store_update_heap \
- test_namestore_api_remove_heap \
- test_namestore_api_zone_iteration_heap \
- test_namestore_api_lookup_nick_heap \
- test_namestore_api_monitoring_heap \
- test_namestore_api_lookup_public_heap \
- test_namestore_api_lookup_private_heap \
- test_namestore_api_lookup_shadow_heap \
- test_namestore_api_lookup_shadow_filter_heap \
- test_namestore_api_remove_not_existing_record_heap \
- test_namestore_api_zone_iteration_nick_heap \
- test_namestore_api_zone_iteration_specific_zone_heap \
- test_namestore_api_zone_iteration_stop_heap \
- test_namestore_api_monitoring_existing_heap \
- test_namestore_api_zone_to_name_heap \
- perf_namestore_api_zone_iteration_heap
+HEAP_TESTS = test_plugin_namestore_flat \
+ test_namestore_api_store_flat \
+ test_namestore_api_store_update_flat \
+ test_namestore_api_remove_flat \
+ test_namestore_api_zone_iteration_flat \
+ test_namestore_api_lookup_nick_flat \
+ test_namestore_api_monitoring_flat \
+ test_namestore_api_lookup_public_flat \
+ test_namestore_api_lookup_private_flat \
+ test_namestore_api_lookup_shadow_flat \
+ test_namestore_api_lookup_shadow_filter_flat \
+ test_namestore_api_remove_not_existing_record_flat \
+ test_namestore_api_zone_iteration_nick_flat \
+ test_namestore_api_zone_iteration_specific_zone_flat \
+ test_namestore_api_zone_iteration_stop_flat \
+ test_namestore_api_monitoring_existing_flat \
+ test_namestore_api_zone_to_name_flat \
+ perf_namestore_api_zone_iteration_flat
endif
if HAVE_SQLITE
@@ -206,14 +206,14 @@ gnunet_service_namestore_LDADD = \
-libgnunet_plugin_namestore_heap_la_SOURCES = \
- plugin_namestore_heap.c
-libgnunet_plugin_namestore_heap_la_LIBADD = \
+libgnunet_plugin_namestore_flat_la_SOURCES = \
+ plugin_namestore_flat.c
+libgnunet_plugin_namestore_flat_la_LIBADD = \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
$(top_builddir)/src/statistics/libgnunetstatistics.la \
$(top_builddir)/src/util/libgnunetutil.la $(XLIBS) \
$(LTLIBINTL)
-libgnunet_plugin_namestore_heap_la_LDFLAGS = \
+libgnunet_plugin_namestore_flat_la_LDFLAGS = \
$(GN_PLUGIN_LDFLAGS)
@@ -239,9 +239,9 @@ libgnunet_plugin_namestore_postgres_la_LIBADD = \
libgnunet_plugin_namestore_postgres_la_LDFLAGS = \
$(GN_PLUGIN_LDFLAGS) $(POSTGRESQL_LDFLAGS)
-test_namestore_api_store_heap_SOURCES = \
+test_namestore_api_store_flat_SOURCES = \
test_namestore_api_store.c
-test_namestore_api_store_heap_LDADD = \
+test_namestore_api_store_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -263,9 +263,9 @@ test_namestore_api_store_postgres_LDADD = \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
libgnunetnamestore.la
-test_namestore_api_store_update_heap_SOURCES = \
+test_namestore_api_store_update_flat_SOURCES = \
test_namestore_api_store_update.c
-test_namestore_api_store_update_heap_LDADD = \
+test_namestore_api_store_update_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -290,9 +290,9 @@ test_namestore_api_store_update_postgres_LDADD = \
$(top_builddir)/src/namecache/libgnunetnamecache.la \
libgnunetnamestore.la
-test_namestore_api_lookup_public_heap_SOURCES = \
+test_namestore_api_lookup_public_flat_SOURCES = \
test_namestore_api_lookup_public.c
-test_namestore_api_lookup_public_heap_LDADD = \
+test_namestore_api_lookup_public_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -335,18 +335,18 @@ test_namestore_api_lookup_nick_postgres_LDADD = \
$(top_builddir)/src/namecache/libgnunetnamecache.la \
libgnunetnamestore.la
-test_namestore_api_lookup_nick_heap_SOURCES = \
+test_namestore_api_lookup_nick_flat_SOURCES = \
test_namestore_api_lookup_nick.c
-test_namestore_api_lookup_nick_heap_LDADD = \
+test_namestore_api_lookup_nick_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
$(top_builddir)/src/namecache/libgnunetnamecache.la \
libgnunetnamestore.la
-test_namestore_api_lookup_private_heap_SOURCES = \
+test_namestore_api_lookup_private_flat_SOURCES = \
test_namestore_api_lookup_private.c
-test_namestore_api_lookup_private_heap_LDADD = \
+test_namestore_api_lookup_private_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -371,9 +371,9 @@ test_namestore_api_lookup_private_postgres_LDADD = \
$(top_builddir)/src/namecache/libgnunetnamecache.la \
libgnunetnamestore.la
-test_namestore_api_lookup_shadow_heap_SOURCES = \
+test_namestore_api_lookup_shadow_flat_SOURCES = \
test_namestore_api_lookup_shadow.c
-test_namestore_api_lookup_shadow_heap_LDADD = \
+test_namestore_api_lookup_shadow_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -398,9 +398,9 @@ test_namestore_api_lookup_shadow_postgres_LDADD = \
$(top_builddir)/src/namecache/libgnunetnamecache.la \
libgnunetnamestore.la
-test_namestore_api_lookup_shadow_filter_heap_SOURCES = \
+test_namestore_api_lookup_shadow_filter_flat_SOURCES = \
test_namestore_api_lookup_shadow_filter.c
-test_namestore_api_lookup_shadow_filter_heap_LDADD = \
+test_namestore_api_lookup_shadow_filter_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -440,17 +440,17 @@ test_namestore_api_remove_postgres_LDADD = \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
libgnunetnamestore.la
-test_namestore_api_remove_heap_SOURCES = \
+test_namestore_api_remove_flat_SOURCES = \
test_namestore_api_remove.c
-test_namestore_api_remove_heap_LDADD = \
+test_namestore_api_remove_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
libgnunetnamestore.la
-test_namestore_api_remove_not_existing_record_heap_SOURCES = \
+test_namestore_api_remove_not_existing_record_flat_SOURCES = \
test_namestore_api_remove_not_existing_record.c
-test_namestore_api_remove_not_existing_record_heap_LDADD = \
+test_namestore_api_remove_not_existing_record_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -472,9 +472,9 @@
test_namestore_api_remove_not_existing_record_postgres_LDADD = \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
libgnunetnamestore.la
-test_namestore_api_zone_to_name_heap_SOURCES = \
+test_namestore_api_zone_to_name_flat_SOURCES = \
test_namestore_api_zone_to_name.c
-test_namestore_api_zone_to_name_heap_LDADD = \
+test_namestore_api_zone_to_name_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
libgnunetnamestore.la
@@ -493,9 +493,9 @@ test_namestore_api_zone_to_name_postgres_LDADD = \
$(top_builddir)/src/util/libgnunetutil.la \
libgnunetnamestore.la
-test_namestore_api_monitoring_heap_SOURCES = \
+test_namestore_api_monitoring_flat_SOURCES = \
test_namestore_api_monitoring.c
-test_namestore_api_monitoring_heap_LDADD = \
+test_namestore_api_monitoring_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
libgnunetnamestore.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -517,9 +517,9 @@ test_namestore_api_monitoring_postgres_LDADD = \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
$(top_builddir)/src/util/libgnunetutil.la
-test_namestore_api_monitoring_existing_heap_SOURCES = \
+test_namestore_api_monitoring_existing_flat_SOURCES = \
test_namestore_api_monitoring_existing.c
-test_namestore_api_monitoring_existing_heap_LDADD = \
+test_namestore_api_monitoring_existing_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
libgnunetnamestore.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -541,9 +541,9 @@ test_namestore_api_monitoring_existing_postgres_LDADD = \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
$(top_builddir)/src/util/libgnunetutil.la
-test_namestore_api_zone_iteration_heap_SOURCES = \
+test_namestore_api_zone_iteration_flat_SOURCES = \
test_namestore_api_zone_iteration.c
-test_namestore_api_zone_iteration_heap_LDADD = \
+test_namestore_api_zone_iteration_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -581,17 +581,17 @@ perf_namestore_api_zone_iteration_sqlite_LDADD = \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
libgnunetnamestore.la
-perf_namestore_api_zone_iteration_heap_SOURCES = \
+perf_namestore_api_zone_iteration_flat_SOURCES = \
perf_namestore_api_zone_iteration.c
-perf_namestore_api_zone_iteration_heap_LDADD = \
+perf_namestore_api_zone_iteration_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
libgnunetnamestore.la
-test_namestore_api_zone_iteration_nick_heap_SOURCES = \
+test_namestore_api_zone_iteration_nick_flat_SOURCES = \
test_namestore_api_zone_iteration_nick.c
-test_namestore_api_zone_iteration_nick_heap_LDADD = \
+test_namestore_api_zone_iteration_nick_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -613,9 +613,9 @@ test_namestore_api_zone_iteration_nick_postgres_LDADD = \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
libgnunetnamestore.la
-test_namestore_api_zone_iteration_specific_zone_heap_SOURCES = \
+test_namestore_api_zone_iteration_specific_zone_flat_SOURCES = \
test_namestore_api_zone_iteration_specific_zone.c
-test_namestore_api_zone_iteration_specific_zone_heap_LDADD = \
+test_namestore_api_zone_iteration_specific_zone_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -637,9 +637,9 @@
test_namestore_api_zone_iteration_specific_zone_postgres_LDADD = \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
libgnunetnamestore.la
-test_namestore_api_zone_iteration_stop_heap_SOURCES = \
+test_namestore_api_zone_iteration_stop_flat_SOURCES = \
test_namestore_api_zone_iteration_stop.c
-test_namestore_api_zone_iteration_stop_heap_LDADD = \
+test_namestore_api_zone_iteration_stop_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
@@ -661,9 +661,9 @@ test_namestore_api_zone_iteration_stop_postgres_LDADD = \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
libgnunetnamestore.la
-test_plugin_namestore_heap_SOURCES = \
+test_plugin_namestore_flat_SOURCES = \
test_plugin_namestore.c
-test_plugin_namestore_heap_LDADD = \
+test_plugin_namestore_flat_LDADD = \
$(top_builddir)/src/testing/libgnunettesting.la \
$(top_builddir)/src/util/libgnunetutil.la
@@ -689,13 +689,13 @@ EXTRA_DIST = \
test_namestore_api.conf \
test_namestore_api_postgres.conf \
test_namestore_api_sqlite.conf \
- test_namestore_api_heap.conf \
+ test_namestore_api_flat.conf \
perf_namestore_api_postgres.conf \
perf_namestore_api_sqlite.conf \
- perf_namestore_api_heap.conf \
+ perf_namestore_api_flat.conf \
test_plugin_namestore_sqlite.conf \
test_plugin_namestore_postgres.conf \
- test_plugin_namestore_heap.conf \
+ test_plugin_namestore_flat.conf \
test_hostkey \
zonefiles/S5I9DSGQVAB5FVV16T3B3CC5H1B2JGL3Q412JBKURME8EKU0600G.zkey \
zonefiles/AQ835GVL939H4O8QJQ7GBLPTQC0QAAO91BN7QK01BA63MDSK6I4G.zkey \
diff --git a/src/namestore/perf_namestore_api_heap.conf
b/src/namestore/perf_namestore_api_flat.conf
similarity index 89%
rename from src/namestore/perf_namestore_api_heap.conf
rename to src/namestore/perf_namestore_api_flat.conf
index a12761a7f..30759ce7a 100644
--- a/src/namestore/perf_namestore_api_heap.conf
+++ b/src/namestore/perf_namestore_api_flat.conf
@@ -1,7 +1,7 @@
@INLINE@ test_namestore_api.conf
[namestore]
-DATABASE = heap
+DATABASE = flat
[namecache]
DISABLE = YES
diff --git a/src/namestore/plugin_namestore_heap.c
b/src/namestore/plugin_namestore_flat.c
similarity index 78%
rename from src/namestore/plugin_namestore_heap.c
rename to src/namestore/plugin_namestore_flat.c
index 2a72c0e51..4e1d33907 100644
--- a/src/namestore/plugin_namestore_heap.c
+++ b/src/namestore/plugin_namestore_flat.c
@@ -1,6 +1,6 @@
/*
* This file is part of GNUnet
- * Copyright (C) 2009-2015, 2018 GNUnet e.V.
+ * Copyright (C) 2009-2015, 2018, 2019 GNUnet e.V.
*
* GNUnet is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published
@@ -17,9 +17,8 @@
SPDX-License-Identifier: AGPL3.0-or-later
*/
-
/**
- * @file namestore/plugin_namestore_heap.c
+ * @file namestore/plugin_namestore_flat.c
* @brief file-based namestore backend
* @author Martin Schanzenbach
* @author Christian Grothoff
@@ -125,7 +124,7 @@ hash_pkey_and_label (const struct
GNUNET_CRYPTO_EcdsaPrivateKey *pkey,
static int
database_setup (struct Plugin *plugin)
{
- char *afsdir;
+ char *flatdbfile;
char *record_data;
char *zone_private_key;
char *record_data_b64;
@@ -139,36 +138,37 @@ database_setup (struct Plugin *plugin)
struct GNUNET_HashCode hkey;
struct GNUNET_DISK_FileHandle *fh;
struct FlatFileEntry *entry;
+ struct GNUNET_DISK_MapHandle *mh;
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_filename (plugin->cfg,
- "namestore-heap",
+ "namestore-flat",
"FILENAME",
- &afsdir))
+ &flatdbfile))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
- "namestore-heap",
+ "namestore-flat",
"FILENAME");
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
- GNUNET_DISK_file_test (afsdir))
+ GNUNET_DISK_file_test (flatdbfile))
{
if (GNUNET_OK !=
- GNUNET_DISK_directory_create_for_file (afsdir))
+ GNUNET_DISK_directory_create_for_file (flatdbfile))
{
GNUNET_break (0);
- GNUNET_free (afsdir);
+ GNUNET_free (flatdbfile);
return GNUNET_SYSERR;
}
}
- /* afsdir should be UTF-8-encoded. If it isn't, it's a bug */
- plugin->fn = afsdir;
+ /* flatdbfile should be UTF-8-encoded. If it isn't, it's a bug */
+ plugin->fn = flatdbfile;
/* Load data from file into hashmap */
plugin->hm = GNUNET_CONTAINER_multihashmap_create (10,
GNUNET_NO);
- fh = GNUNET_DISK_file_open (afsdir,
+ fh = GNUNET_DISK_file_open (flatdbfile,
GNUNET_DISK_OPEN_CREATE |
GNUNET_DISK_OPEN_READWRITE,
GNUNET_DISK_PERM_USER_WRITE |
@@ -177,137 +177,152 @@ database_setup (struct Plugin *plugin)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_("Unable to initialize file: %s.\n"),
- afsdir);
+ flatdbfile);
return GNUNET_SYSERR;
}
if (GNUNET_SYSERR ==
- GNUNET_DISK_file_size (afsdir,
+ GNUNET_DISK_file_size (flatdbfile,
&size,
GNUNET_YES,
GNUNET_YES))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_("Unable to get filesize: %s.\n"),
- afsdir);
+ flatdbfile);
GNUNET_DISK_file_close (fh);
return GNUNET_SYSERR;
}
-
- buffer = GNUNET_malloc_large (size + 1);
- if (GNUNET_SYSERR ==
- GNUNET_DISK_file_read (fh,
- buffer,
- size))
+ if (size > SIZE_MAX)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- _("Unable to read file: %s.\n"),
- afsdir);
- GNUNET_free (buffer);
+ _("File too big to map: %llu bytes.\n"),
+ (unsigned long long) size);
+ GNUNET_DISK_file_close (fh);
+ return GNUNET_SYSERR;
+ }
+ if (0 == size)
+ {
+ GNUNET_DISK_file_close (fh);
+ return GNUNET_OK;
+ }
+ buffer = GNUNET_DISK_file_map (fh,
+ &mh,
+ GNUNET_DISK_MAP_TYPE_READ,
+ size);
+ if (NULL == buffer)
+ {
+ GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
+ "mmap");
+ GNUNET_DISK_file_close (fh);
+ return GNUNET_SYSERR;
+ }
+ if ('\0' != buffer[size-1])
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ _("Namestore database file `%s' malformed\n"),
+ flatdbfile);
+ GNUNET_DISK_file_unmap (mh);
GNUNET_DISK_file_close (fh);
return GNUNET_SYSERR;
}
- buffer[size] = '\0';
- GNUNET_DISK_file_close (fh);
- if (0 < size)
+ line = strtok (buffer, "\n");
+ while (NULL != line)
{
- line = strtok (buffer, "\n");
- while (line != NULL)
+ zone_private_key = strtok (line, ",");
+ if (NULL == zone_private_key)
+ break;
+ rvalue = strtok (NULL, ",");
+ if (NULL == rvalue)
+ break;
+ record_count = strtok (NULL, ",");
+ if (NULL == record_count)
+ break;
+ record_data_b64 = strtok (NULL, ",");
+ if (NULL == record_data_b64)
+ break;
+ label = strtok (NULL, ",");
+ if (NULL == label)
+ break;
+ line = strtok (NULL, "\n");
+ entry = GNUNET_new (struct FlatFileEntry);
{
- zone_private_key = strtok (line, ",");
- if (NULL == zone_private_key)
- break;
- rvalue = strtok (NULL, ",");
- if (NULL == rvalue)
- break;
- record_count = strtok (NULL, ",");
- if (NULL == record_count)
- break;
- record_data_b64 = strtok (NULL, ",");
- if (NULL == record_data_b64)
- break;
- label = strtok (NULL, ",");
- if (NULL == label)
- break;
- line = strtok (NULL, "\n");
- entry = GNUNET_new (struct FlatFileEntry);
- {
- unsigned long long ll;
-
- if (1 != sscanf (rvalue,
- "%llu",
- &ll))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Error parsing entry\n");
- GNUNET_free (entry);
- break;
- }
- entry->rvalue = (uint64_t) ll;
- }
- {
- unsigned int ui;
-
- if (1 != sscanf (record_count,
- "%u",
- &ui))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Error parsing entry\n");
- GNUNET_free (entry);
- break;
- }
- entry->record_count = (uint32_t) ui;
- }
- entry->label = GNUNET_strdup (label);
- record_data_size
- = GNUNET_STRINGS_base64_decode (record_data_b64,
- strlen (record_data_b64),
- (void **) &record_data);
- entry->record_data =
- GNUNET_new_array (entry->record_count,
- struct GNUNET_GNSRECORD_Data);
- if (GNUNET_OK !=
- GNUNET_GNSRECORD_records_deserialize (record_data_size,
- record_data,
- entry->record_count,
- entry->record_data))
+ unsigned long long ll;
+
+ if (1 != sscanf (rvalue,
+ "%llu",
+ &ll))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Unable to deserialize record %s\n",
- label);
- GNUNET_free (entry->label);
+ "Error parsing entry\n");
GNUNET_free (entry);
- GNUNET_free (record_data);
break;
}
- GNUNET_free (record_data);
-
- {
- struct GNUNET_CRYPTO_EcdsaPrivateKey *private_key;
-
- GNUNET_STRINGS_base64_decode (zone_private_key,
- strlen (zone_private_key),
- (void**)&private_key);
- entry->private_key = *private_key;
- GNUNET_free (private_key);
- }
+ entry->rvalue = (uint64_t) ll;
+ }
+ {
+ unsigned int ui;
- hash_pkey_and_label (&entry->private_key,
- label,
- &hkey);
- if (GNUNET_OK !=
- GNUNET_CONTAINER_multihashmap_put (plugin->hm,
- &hkey,
- entry,
-
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
+ if (1 != sscanf (record_count,
+ "%u",
+ &ui))
{
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Error parsing entry\n");
GNUNET_free (entry);
- GNUNET_break (0);
+ break;
}
+ entry->record_count = (uint32_t) ui;
+ }
+ entry->label = GNUNET_strdup (label);
+ record_data_size
+ = GNUNET_STRINGS_base64_decode (record_data_b64,
+ strlen (record_data_b64),
+ (void **) &record_data);
+ entry->record_data =
+ GNUNET_new_array (entry->record_count,
+ struct GNUNET_GNSRECORD_Data);
+ if (GNUNET_OK !=
+ GNUNET_GNSRECORD_records_deserialize (record_data_size,
+ record_data,
+ entry->record_count,
+ entry->record_data))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Unable to deserialize record %s\n",
+ label);
+ GNUNET_free (entry->label);
+ GNUNET_free (entry);
+ GNUNET_free (record_data);
+ break;
+ }
+ GNUNET_free (record_data);
+
+ {
+ struct GNUNET_CRYPTO_EcdsaPrivateKey *private_key;
+
+ GNUNET_STRINGS_base64_decode (zone_private_key,
+ strlen (zone_private_key),
+ (void**)&private_key);
+ entry->private_key = *private_key;
+ GNUNET_free (private_key);
+ }
+
+ hash_pkey_and_label (&entry->private_key,
+ label,
+ &hkey);
+ if (GNUNET_OK !=
+ GNUNET_CONTAINER_multihashmap_put (plugin->hm,
+ &hkey,
+ entry,
+
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
+ {
+ GNUNET_free (entry);
+ GNUNET_break (0);
}
}
- GNUNET_free (buffer);
+ GNUNET_DISK_file_unmap (mh);
+ GNUNET_DISK_file_close (fh);
return GNUNET_OK;
}
@@ -418,6 +433,10 @@ database_shutdown (struct Plugin *plugin)
&store_and_free_entries,
fh);
GNUNET_CONTAINER_multihashmap_destroy (plugin->hm);
+ /* append 0-terminator */
+ GNUNET_DISK_file_write (fh,
+ "",
+ 1);
GNUNET_DISK_file_close (fh);
}
@@ -434,7 +453,7 @@ database_shutdown (struct Plugin *plugin)
* @return #GNUNET_OK on success, else #GNUNET_SYSERR
*/
static int
-namestore_heap_store_records (void *cls,
+namestore_flat_store_records (void *cls,
const struct GNUNET_CRYPTO_EcdsaPrivateKey
*zone_key,
const char *label,
unsigned int rd_count,
@@ -499,7 +518,7 @@ namestore_heap_store_records (void *cls,
* @return #GNUNET_OK on success, #GNUNET_NO for no results, else
#GNUNET_SYSERR
*/
static int
-namestore_heap_lookup_records (void *cls,
+namestore_flat_lookup_records (void *cls,
const struct GNUNET_CRYPTO_EcdsaPrivateKey
*zone,
const char *label,
GNUNET_NAMESTORE_RecordIterator iter,
@@ -573,7 +592,7 @@ struct IterateContext
/**
- * Helper function for #namestore_heap_iterate_records().
+ * Helper function for #namestore_flat_iterate_records().
*
* @param cls a `struct IterateContext`
* @param key unused
@@ -629,7 +648,7 @@ iterate_zones (void *cls,
* @return #GNUNET_OK on success, #GNUNET_NO if there were no more results,
#GNUNET_SYSERR on error
*/
static int
-namestore_heap_iterate_records (void *cls,
+namestore_flat_iterate_records (void *cls,
const struct GNUNET_CRYPTO_EcdsaPrivateKey
*zone,
uint64_t serial,
uint64_t limit,
@@ -712,7 +731,7 @@ zone_to_name (void *cls,
* @return #GNUNET_OK on success, #GNUNET_NO if there were no results,
#GNUNET_SYSERR on error
*/
static int
-namestore_heap_zone_to_name (void *cls,
+namestore_flat_zone_to_name (void *cls,
const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone,
const struct GNUNET_CRYPTO_EcdsaPublicKey
*value_zone,
GNUNET_NAMESTORE_RecordIterator iter,
@@ -744,7 +763,7 @@ namestore_heap_zone_to_name (void *cls,
* @return NULL on error, otherwise the plugin context
*/
void *
-libgnunet_plugin_namestore_heap_init (void *cls)
+libgnunet_plugin_namestore_flat_init (void *cls)
{
static struct Plugin plugin;
const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
@@ -763,12 +782,12 @@ libgnunet_plugin_namestore_heap_init (void *cls)
}
api = GNUNET_new (struct GNUNET_NAMESTORE_PluginFunctions);
api->cls = &plugin;
- api->store_records = &namestore_heap_store_records;
- api->iterate_records = &namestore_heap_iterate_records;
- api->zone_to_name = &namestore_heap_zone_to_name;
- api->lookup_records = &namestore_heap_lookup_records;
+ api->store_records = &namestore_flat_store_records;
+ api->iterate_records = &namestore_flat_iterate_records;
+ api->zone_to_name = &namestore_flat_zone_to_name;
+ api->lookup_records = &namestore_flat_lookup_records;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- _("heap file database running\n"));
+ _("Flat file database running\n"));
return api;
}
@@ -780,7 +799,7 @@ libgnunet_plugin_namestore_heap_init (void *cls)
* @return always NULL
*/
void *
-libgnunet_plugin_namestore_heap_done (void *cls)
+libgnunet_plugin_namestore_flat_done (void *cls)
{
struct GNUNET_NAMESTORE_PluginFunctions *api = cls;
struct Plugin *plugin = api->cls;
@@ -789,8 +808,8 @@ libgnunet_plugin_namestore_heap_done (void *cls)
plugin->cfg = NULL;
GNUNET_free (api);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "heap file plugin is finished\n");
+ "Flat file plugin is finished\n");
return NULL;
}
-/* end of plugin_namestore_heap.c */
+/* end of plugin_namestore_flat.c */
diff --git a/src/namestore/test_namestore_api_heap.conf
b/src/namestore/test_namestore_api_flat.conf
similarity index 87%
rename from src/namestore/test_namestore_api_heap.conf
rename to src/namestore/test_namestore_api_flat.conf
index 1d6173e74..8460d143c 100644
--- a/src/namestore/test_namestore_api_heap.conf
+++ b/src/namestore/test_namestore_api_flat.conf
@@ -1,7 +1,7 @@
@INLINE@ test_namestore_api.conf
[namestore]
-DATABASE = heap
+DATABASE = flat
[namestore-heap]
FILENAME = $GNUNET_TEST_HOME/namestore/flat.db
diff --git a/src/namestore/test_plugin_namestore_heap.conf
b/src/namestore/test_plugin_namestore_flat.conf
similarity index 79%
rename from src/namestore/test_plugin_namestore_heap.conf
rename to src/namestore/test_plugin_namestore_flat.conf
index 94f79b9aa..5c632f0d1 100644
--- a/src/namestore/test_plugin_namestore_heap.conf
+++ b/src/namestore/test_plugin_namestore_flat.conf
@@ -1,2 +1,2 @@
-[namestore-heap]
+[namestore-flat]
FILENAME = $GNUNET_TMP/gnunet-test-plugin-namestore-flat/flatdb
diff --git a/src/util/disk.c b/src/util/disk.c
index 4f78c7747..f395a375e 100644
--- a/src/util/disk.c
+++ b/src/util/disk.c
@@ -2021,7 +2021,7 @@ GNUNET_DISK_file_map (const struct GNUNET_DISK_FileHandle
*h,
struct GNUNET_DISK_MapHandle **m,
enum GNUNET_DISK_MapType access, size_t len)
{
- if (h == NULL)
+ if (NULL == h)
{
errno = EINVAL;
return NULL;
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [GNUnet-SVN] [gnunet] branch master updated: use mmap() instead of malloc, rename heap->flat as database is persisted in flat file,
gnunet <=