gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]