[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnunet] branch master updated: use namestore API for zone
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnunet] branch master updated: use namestore API for zone import instead of using plugin directly |
Date: |
Tue, 17 Apr 2018 14:42:57 +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 7eb7bd866 use namestore API for zone import instead of using plugin
directly
7eb7bd866 is described below
commit 7eb7bd8666aeb2e855cd22b1ea7f44b87bb60400
Author: Christian Grothoff <address@hidden>
AuthorDate: Tue Apr 17 14:42:46 2018 +0200
use namestore API for zone import instead of using plugin directly
---
src/include/gnunet_namestore_plugin.h | 29 ----
src/include/gnunet_namestore_service.h | 5 +-
src/namestore/Makefile.am | 1 +
src/namestore/gnunet-namestore.c | 3 +
src/namestore/gnunet-zoneimport.c | 279 ++++++++++++++----------------
src/namestore/plugin_namestore_flat.c | 43 -----
src/namestore/plugin_namestore_postgres.c | 77 ---------
src/namestore/plugin_namestore_sqlite.c | 44 -----
8 files changed, 137 insertions(+), 344 deletions(-)
diff --git a/src/include/gnunet_namestore_plugin.h
b/src/include/gnunet_namestore_plugin.h
index d1c68cd23..3ebf48987 100644
--- a/src/include/gnunet_namestore_plugin.h
+++ b/src/include/gnunet_namestore_plugin.h
@@ -145,35 +145,6 @@ struct GNUNET_NAMESTORE_PluginFunctions
void *iter_cls);
- /**
- * Start a transaction.
- *
- * @param cls closure
- * @return #GNUNET_OK on success, #GNUNET_NO if transactions are not
supported,
- * #GNUNET_SYSERR on internal errors
- */
- int
- (*begin_transaction) (void *cls);
-
-
- /**
- * Try to commit a transaction.
- *
- * @param cls closure
- * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure
- */
- int
- (*commit_transaction) (void *cls);
-
-
- /**
- * Rollback a transaction.
- *
- * @param cls closure
- */
- void
- (*rollback_transaction) (void *cls);
-
};
diff --git a/src/include/gnunet_namestore_service.h
b/src/include/gnunet_namestore_service.h
index 6d3c07f1d..f8c2eaf3b 100644
--- a/src/include/gnunet_namestore_service.h
+++ b/src/include/gnunet_namestore_service.h
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet
- Copyright (C) 2012, 2013 GNUnet e.V.
+ Copyright (C) 2012, 2013, 2018 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
@@ -128,7 +128,6 @@ GNUNET_NAMESTORE_records_store (struct
GNUNET_NAMESTORE_Handle *h,
void *cont_cls);
-
/**
* Process a record that was stored in the namestore.
*
@@ -153,7 +152,7 @@ typedef void
* @param pkey private key of the zone
* @param nick the nick name to set
* @param cont continuation to call when done
- * @param cont_cls closure for 'cont'
+ * @param cont_cls closure for @a cont
* @return handle to abort the request
*/
struct GNUNET_NAMESTORE_QueueEntry *
diff --git a/src/namestore/Makefile.am b/src/namestore/Makefile.am
index 50b60d020..fd8f8054f 100644
--- a/src/namestore/Makefile.am
+++ b/src/namestore/Makefile.am
@@ -138,6 +138,7 @@ endif
gnunet_zoneimport_SOURCES = \
gnunet-zoneimport.c
gnunet_zoneimport_LDADD = \
+ libgnunetnamestore.la \
$(top_builddir)/src/identity/libgnunetidentity.la \
$(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
$(top_builddir)/src/dns/libgnunetdnsparser.la \
diff --git a/src/namestore/gnunet-namestore.c b/src/namestore/gnunet-namestore.c
index 2eff995e0..9a1805af4 100644
--- a/src/namestore/gnunet-namestore.c
+++ b/src/namestore/gnunet-namestore.c
@@ -394,6 +394,7 @@ display_record (void *cls,
struct GNUNET_TIME_Relative rt;
(void) cls;
+ (void) zone_key;
if ( (NULL != name) &&
(0 != strcmp (name, rname)) )
{
@@ -509,6 +510,7 @@ get_existing_record (void *cls,
struct GNUNET_GNSRECORD_Data *rde;
(void) cls;
+ (void) zone_key;
add_qe = NULL;
if (0 != strcmp (rec_name, name))
{
@@ -656,6 +658,7 @@ handle_reverse_lookup (void *cls,
const struct GNUNET_GNSRECORD_Data *rd)
{
(void) cls;
+ (void) zone;
reverse_qe = NULL;
if (NULL == label)
FPRINTF (stdout,
diff --git a/src/namestore/gnunet-zoneimport.c
b/src/namestore/gnunet-zoneimport.c
index 4d595e554..0148f42a7 100644
--- a/src/namestore/gnunet-zoneimport.c
+++ b/src/namestore/gnunet-zoneimport.c
@@ -30,7 +30,7 @@
#include <gnunet_dnsstub_lib.h>
#include <gnunet_dnsparser_lib.h>
#include <gnunet_gnsrecord_lib.h>
-#include <gnunet_namestore_plugin.h>
+#include <gnunet_namestore_service.h>
#include <gnunet_identity_service.h>
@@ -164,6 +164,11 @@ struct Request
char *label;
/**
+ * Namestore operation pending for this record.
+ */
+ struct GNUNET_NAMESTORE_QueueEntry *qe;
+
+ /**
* Zone responsible for this request.
*/
const struct Zone *zone;
@@ -210,9 +215,9 @@ struct Request
static struct GNUNET_IDENTITY_Handle *id;
/**
- * Namestore plugin.
+ * Namestore handle.
*/
-static struct GNUNET_NAMESTORE_PluginFunctions *ns;
+static struct GNUNET_NAMESTORE_Handle *ns;
/**
* Context for DNS resolution.
@@ -271,11 +276,6 @@ static struct GNUNET_SCHEDULER_Task *t;
static char *dns_server;
/**
- * Name of the database plugin (for loading/unloading).
- */
-static char *db_lib_name;
-
-/**
* Head of list of zones we are managing.
*/
static struct Zone *zone_head;
@@ -285,16 +285,6 @@ static struct Zone *zone_head;
*/
static struct Zone *zone_tail;
-/**
- * Set to #GNUNET_YES if we are currently in a DB transaction.
- */
-static int in_transaction;
-
-/**
- * Flag set if we should use transactions to batch DB operations.
- */
-static int use_transactions;
-
/**
* Callback for #for_all_records
@@ -790,6 +780,41 @@ process_record (void *cls,
/**
+ * Continuation called to notify client about result of the
+ * operation.
+ *
+ * @param cls closure with our `struct Request`
+ * @param success #GNUNET_SYSERR on failure (including timeout/queue
drop/failure to validate)
+ * #GNUNET_NO if content was already there or not found
+ * #GNUNET_YES (or other positive value) on success
+ * @param emsg NULL on success, otherwise an error message
+ */
+static void
+store_completed_cb (void *cls,
+ int32_t success,
+ const char *emsg)
+{
+ struct Request *req = cls;
+
+ req->qe = NULL;
+ pending--;
+ if (GNUNET_SYSERR == success)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to store zone data for `%s': %s\n",
+ req->hostname,
+ emsg);
+ }
+ else
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Stored records under `%s'\n",
+ req->label);
+ }
+}
+
+
+/**
* Function called with the result of a DNS resolution.
*
* @param cls closure with the `struct Request`
@@ -835,7 +860,6 @@ process_result (void *cls,
GNUNET_CONTAINER_DLL_remove (req_head,
req_tail,
req);
- pending--;
GNUNET_DNSSTUB_resolve_cancel (req->rs);
req->rs = NULL;
p = GNUNET_DNSPARSER_parse ((const char *) dns,
@@ -849,9 +873,11 @@ process_result (void *cls,
{
failures++;
insert_sorted (req);
+ pending--;
return;
}
insert_sorted (req);
+ pending--;
return;
}
/* Free old/legacy records */
@@ -899,34 +925,13 @@ process_result (void *cls,
/* convert linked list into array */
for (rec = req->rec_head; NULL != rec; rec =rec->next)
rd[off++] = rec->grd;
- if ( (! in_transaction) &&
- (GNUNET_YES == use_transactions) )
- {
- /* not all plugins support transactions, but if one does,
- remember we need to eventually commit... */
- if (GNUNET_OK ==
- ns->begin_transaction (ns->cls))
- in_transaction = GNUNET_YES;
- }
- if (GNUNET_OK !=
- ns->store_records (ns->cls,
- &req->zone->key,
- req->label,
- rd_count,
- rd))
- {
- if (0 != rd_count)
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to store zone data for `%s'\n",
- req->hostname);
- }
- else
- {
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Stored %u records under `%s'\n",
- (unsigned int) rd_count,
- req->label);
- }
+ req->qe = GNUNET_NAMESTORE_records_store (ns,
+ &req->zone->key,
+ req->label,
+ rd_count,
+ rd,
+ &store_completed_cb,
+ req);
}
insert_sorted (req);
}
@@ -947,6 +952,8 @@ submit_req (struct Request *req)
static struct GNUNET_TIME_Absolute last_request;
struct GNUNET_TIME_Absolute now;
+ if (NULL != req->qe)
+ return GNUNET_NO; /* namestore op still pending */
if (NULL != req->rs)
{
GNUNET_break (0);
@@ -979,25 +986,6 @@ submit_req (struct Request *req)
/**
- * If we are currently in a transaction, commit it.
- */
-static void
-finish_transaction ()
-{
- if (! in_transaction)
- return;
- if (GNUNET_OK !=
- ns->commit_transaction (ns->cls))
- {
- GNUNET_break (0);
- GNUNET_SCHEDULER_shutdown ();
- return;
- }
- in_transaction = GNUNET_NO;
-}
-
-
-/**
* Process as many requests as possible from the queue.
*
* @param cls NULL
@@ -1006,7 +994,6 @@ static void
process_queue (void *cls)
{
struct Request *req;
- static unsigned int cnt;
(void) cls;
t = NULL;
@@ -1033,7 +1020,6 @@ process_queue (void *cls)
"Waiting until %s for next record (`%s') to expire\n",
GNUNET_STRINGS_absolute_time_to_string (req->expires),
req->hostname);
- finish_transaction ();
if (NULL != t)
GNUNET_SCHEDULER_cancel (t);
t = GNUNET_SCHEDULER_add_at (req->expires,
@@ -1042,8 +1028,6 @@ process_queue (void *cls)
}
else
{
- if (0 == cnt++ % TRANSACTION_SYNC_FREQ)
- finish_transaction ();
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Throttling for 1ms\n");
if (NULL != t)
@@ -1077,14 +1061,10 @@ do_shutdown (void *cls)
GNUNET_SCHEDULER_cancel (t);
t = NULL;
}
- finish_transaction ();
if (NULL != ns)
{
- GNUNET_break (NULL ==
- GNUNET_PLUGIN_unload (db_lib_name,
- ns));
- GNUNET_free (db_lib_name);
- db_lib_name = NULL;
+ GNUNET_NAMESTORE_disconnect (ns);
+ ns = NULL;
}
if (NULL != ctx)
{
@@ -1120,26 +1100,46 @@ do_shutdown (void *cls)
/**
- * Function called for each matching record.
+ * Function called if #GNUNET_NAMESTORE_records_lookup() failed.
+ * Continues resolution based on assumption namestore has no data.
*
- * @param cls `struct Request *`
- * @param zone_key private key of the zone
- * @param label name that is being mapped (at most 255 characters long)
- * @param rd_count number of entries in @a rd array
- * @param rd array of records with data to store
+ * @param cls a `struct Request`
*/
static void
-import_records (void *cls,
- const struct GNUNET_CRYPTO_EcdsaPrivateKey *private_key,
- const char *label,
- unsigned int rd_count,
- const struct GNUNET_GNSRECORD_Data *rd)
+ns_lookup_error_cb (void *cls)
{
struct Request *req = cls;
- GNUNET_break (0 == memcmp (private_key,
+ req->qe = NULL;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Failed to load data from namestore for `%s'\n",
+ req->label);
+ insert_sorted (req);
+}
+
+
+/**
+ * Process a record that was stored in the namestore.
+ *
+ * @param cls a `struct Request *`
+ * @param zone private key of the zone
+ * @param label label of the records
+ * @param rd_count number of entries in @a rd array, 0 if label was deleted
+ * @param rd array of records with data to store
+ */
+static void
+ns_lookup_result_cb (void *cls,
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone,
+ const char *label,
+ unsigned int rd_count,
+ const struct GNUNET_GNSRECORD_Data *rd)
+{
+ struct Request *req = cls;
+
+ req->qe = NULL;
+ GNUNET_break (0 == memcmp (zone,
&req->zone->key,
- sizeof (*private_key)));
+ sizeof (*zone)));
GNUNET_break (0 == strcasecmp (label,
req->label));
for (unsigned int i=0;i<rd_count;i++)
@@ -1153,6 +1153,40 @@ import_records (void *cls,
rd->data,
rd->data_size);
}
+ if (0 == rd_count)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Empty record set in namestore for `%s'\n",
+ req->label);
+ }
+ else
+ {
+ unsigned int pos = 0;
+
+ req->expires = GNUNET_TIME_UNIT_FOREVER_ABS;
+ for (struct Record *rec = req->rec_head;
+ NULL != rec;
+ rec = rec->next)
+ {
+ struct GNUNET_TIME_Absolute at;
+
+ at.abs_value_us = rec->grd.expiration_time;
+ req->expires = GNUNET_TIME_absolute_min (req->expires,
+ at);
+ pos++;
+ }
+ if (0 == pos)
+ req->expires = GNUNET_TIME_UNIT_ZERO_ABS;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Hot-start with %u existing records for `%s'\n",
+ pos,
+ req->label);
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Adding `%s' to worklist to start at %s\n",
+ req->hostname,
+ GNUNET_STRINGS_absolute_time_to_string (req->expires));
+ insert_sorted (req);
}
@@ -1236,45 +1270,13 @@ queue (const char *hostname)
req->id = p.id;
req->label = GNUNET_strndup (hostname,
dot - hostname);
- if (GNUNET_OK !=
- ns->lookup_records (ns->cls,
- &req->zone->key,
- req->label,
- &import_records,
- req))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Failed to load data from namestore for `%s'\n",
- req->label);
- }
- else
- {
- unsigned int rd_count = 0;
-
- req->expires = GNUNET_TIME_UNIT_FOREVER_ABS;
- for (struct Record *rec = req->rec_head;
- NULL != rec;
- rec = rec->next)
- {
- struct GNUNET_TIME_Absolute at;
-
- at.abs_value_us = rec->grd.expiration_time;
- req->expires = GNUNET_TIME_absolute_min (req->expires,
- at);
- rd_count++;
- }
- if (0 == rd_count)
- req->expires = GNUNET_TIME_UNIT_ZERO_ABS;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Hot-start with %u existing records for `%s'\n",
- rd_count,
- req->label);
- }
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Adding `%s' to worklist to start at %s\n",
- req->hostname,
- GNUNET_STRINGS_absolute_time_to_string (req->expires));
- insert_sorted (req);
+ req->qe = GNUNET_NAMESTORE_records_lookup (ns,
+ &req->zone->key,
+ req->label,
+ &ns_lookup_error_cb,
+ req,
+ &ns_lookup_result_cb,
+ req);
}
@@ -1390,8 +1392,6 @@ run (void *cls,
const char *cfgfile,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
- char *database;
-
(void) cls;
(void) args;
(void) cfgfile;
@@ -1403,22 +1403,9 @@ run (void *cls,
"Failed to initialize GNUnet DNS STUB\n");
return;
}
- if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_string (cfg,
- "namestore",
- "database",
- &database))
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "No database backend configured\n");
-
- GNUNET_asprintf (&db_lib_name,
- "libgnunet_plugin_namestore_%s",
- database);
- ns = GNUNET_PLUGIN_load (db_lib_name,
- (void *) cfg);
- GNUNET_free (database);
GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
NULL);
+ ns = GNUNET_NAMESTORE_connect (cfg);
if (NULL == ns)
{
GNUNET_SCHEDULER_shutdown ();
@@ -1448,10 +1435,6 @@ main (int argc,
"IP",
"which DNS server should be used",
&dns_server)),
- GNUNET_GETOPT_option_flag ('e',
- "enable-transactions",
- "enable use of transactions to reduce disk IO",
- &use_transactions),
GNUNET_GETOPT_OPTION_END
};
diff --git a/src/namestore/plugin_namestore_flat.c
b/src/namestore/plugin_namestore_flat.c
index 170adb49e..305fe7ba1 100644
--- a/src/namestore/plugin_namestore_flat.c
+++ b/src/namestore/plugin_namestore_flat.c
@@ -667,46 +667,6 @@ namestore_flat_zone_to_name (void *cls,
/**
- * Start a transaction.
- *
- * @param cls closure
- * @return #GNUNET_OK on success, #GNUNET_NO if transactions are not supported,
- * #GNUNET_SYSERR on internal errors
- */
-static int
-namestore_flat_begin_transaction (void *cls)
-{
- return GNUNET_NO;
-}
-
-
-/**
- * Try to commit a transaction.
- *
- * @param cls closure
- * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure
- */
-static int
-namestore_flat_commit_transaction (void *cls)
-{
- GNUNET_break (0);
- return GNUNET_SYSERR;
-}
-
-
-/**
- * Rollback a transaction.
- *
- * @param cls closure
- */
-static void
-namestore_flat_rollback_transaction (void *cls)
-{
- GNUNET_break (0);
-}
-
-
-/**
* Entry point for the plugin.
*
* @param cls the "struct GNUNET_NAMESTORE_PluginEnvironment*"
@@ -736,9 +696,6 @@ libgnunet_plugin_namestore_flat_init (void *cls)
api->iterate_records = &namestore_flat_iterate_records;
api->zone_to_name = &namestore_flat_zone_to_name;
api->lookup_records = &namestore_flat_lookup_records;
- api->begin_transaction = &namestore_flat_begin_transaction;
- api->commit_transaction = &namestore_flat_commit_transaction;
- api->rollback_transaction = &namestore_flat_rollback_transaction;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
_("flat file database running\n"));
return api;
diff --git a/src/namestore/plugin_namestore_postgres.c
b/src/namestore/plugin_namestore_postgres.c
index 378a88f51..a9c19d517 100644
--- a/src/namestore/plugin_namestore_postgres.c
+++ b/src/namestore/plugin_namestore_postgres.c
@@ -518,80 +518,6 @@ database_shutdown (struct Plugin *plugin)
/**
- * Start a transaction.
- *
- * @param cls closure
- * @return #GNUNET_OK on success, #GNUNET_NO if transactions are not supported,
- * #GNUNET_SYSERR on internal errors
- */
-static int
-namestore_postgres_begin_transaction (void *cls)
-{
- struct Plugin *plugin = cls;
- PGresult *result;
- ExecStatusType ex;
-
- result = PQexec (plugin->dbh,
- "START TRANSACTION ISOLATION LEVEL SERIALIZABLE");
- if (PGRES_COMMAND_OK !=
- (ex = PQresultStatus (result)))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to start transaction (%s): %s\n",
- PQresStatus (ex),
- PQerrorMessage (plugin->dbh));
- GNUNET_break (0);
- PQclear (result);
- return GNUNET_SYSERR;
- }
- PQclear (result);
- return GNUNET_OK;
-}
-
-
-/**
- * Try to commit a transaction.
- *
- * @param cls closure
- * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure
- */
-static int
-namestore_postgres_commit_transaction (void *cls)
-{
- struct Plugin *plugin = cls;
- PGresult *result;
- ExecStatusType status;
- int ret;
-
- result = PQexec (plugin->dbh,
- "COMMIT");
- status = PQresultStatus (result);
- ret = (PGRES_COMMAND_OK == status) ? GNUNET_OK : GNUNET_SYSERR;
- PQclear (result);
- return ret;
-}
-
-
-/**
- * Rollback a transaction.
- *
- * @param cls closure
- */
-static void
-namestore_postgres_rollback_transaction (void *cls)
-{
- struct Plugin *plugin = cls;
- PGresult *result;
-
- result = PQexec (plugin->dbh,
- "ROLLBACK");
- GNUNET_break (PGRES_COMMAND_OK ==
- PQresultStatus (result));
- PQclear (result);
-}
-
-
-/**
* Entry point for the plugin.
*
* @param cls the `struct GNUNET_NAMESTORE_PluginEnvironment*`
@@ -619,9 +545,6 @@ libgnunet_plugin_namestore_postgres_init (void *cls)
api->iterate_records = &namestore_postgres_iterate_records;
api->zone_to_name = &namestore_postgres_zone_to_name;
api->lookup_records = &namestore_postgres_lookup_records;
- api->begin_transaction = &namestore_postgres_begin_transaction;
- api->commit_transaction = &namestore_postgres_commit_transaction;
- api->rollback_transaction = &namestore_postgres_rollback_transaction;
LOG (GNUNET_ERROR_TYPE_INFO,
"Postgres namestore plugin running\n");
return api;
diff --git a/src/namestore/plugin_namestore_sqlite.c
b/src/namestore/plugin_namestore_sqlite.c
index 1ebb6bfc7..5ad84688c 100644
--- a/src/namestore/plugin_namestore_sqlite.c
+++ b/src/namestore/plugin_namestore_sqlite.c
@@ -773,47 +773,6 @@ namestore_sqlite_zone_to_name (void *cls,
/**
- * Start a transaction.
- *
- * @param cls closure
- * @return #GNUNET_OK on success, #GNUNET_NO if transactions are not supported,
- * #GNUNET_SYSERR on internal errors
- */
-static int
-namestore_sqlite_begin_transaction (void *cls)
-{
- return GNUNET_NO;
-}
-
-
-/**
- * Try to commit a transaction.
- *
- * @param cls closure
- * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure
- */
-static int
-namestore_sqlite_commit_transaction (void *cls)
-{
- GNUNET_break (0);
- return GNUNET_SYSERR;
-}
-
-
-/**
- * Rollback a transaction.
- *
- * @param cls closure
- */
-static void
-namestore_sqlite_rollback_transaction (void *cls)
-{
- GNUNET_break (0);
-}
-
-
-
-/**
* Entry point for the plugin.
*
* @param cls the "struct GNUNET_NAMESTORE_PluginEnvironment*"
@@ -841,9 +800,6 @@ libgnunet_plugin_namestore_sqlite_init (void *cls)
api->iterate_records = &namestore_sqlite_iterate_records;
api->zone_to_name = &namestore_sqlite_zone_to_name;
api->lookup_records = &namestore_sqlite_lookup_records;
- api->begin_transaction = &namestore_sqlite_begin_transaction;
- api->commit_transaction = &namestore_sqlite_commit_transaction;
- api->rollback_transaction = &namestore_sqlite_rollback_transaction;
LOG (GNUNET_ERROR_TYPE_INFO,
_("Sqlite database running\n"));
return api;
--
To stop receiving notification emails like this one, please contact
address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] [gnunet] branch master updated: use namestore API for zone import instead of using plugin directly,
gnunet <=