From a9c2c9e208c23b3923744e854aa7aa32355b1bb1 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 27 Sep 2011 21:07:58 +0000 Subject: [PATCH] DCE --- src/dht/plugin_dhtlog_mysql_dump_load.c | 944 ------------------------ src/dht/test_dhtlog.c | 256 ------- 2 files changed, 1200 deletions(-) delete mode 100644 src/dht/plugin_dhtlog_mysql_dump_load.c delete mode 100644 src/dht/test_dhtlog.c diff --git a/src/dht/plugin_dhtlog_mysql_dump_load.c b/src/dht/plugin_dhtlog_mysql_dump_load.c deleted file mode 100644 index fada2029e..000000000 --- a/src/dht/plugin_dhtlog_mysql_dump_load.c +++ /dev/null @@ -1,944 +0,0 @@ -/* - This file is part of GNUnet. - (C) 2006 - 2009 Christian Grothoff (and other contributing authors) - - GNUnet is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, or (at your - option) any later version. - - GNUnet is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -/** - * @file src/dht/plugin_dhtlog_mysql_dump_load.c - * @brief MySQL logging plugin to record DHT operations to MySQL server, - * but write all queries to file instead of the actual server - * so that they can be imported later. Since the first attempt - * (writing out SQL queries) seemed rather time consuming on insert, - * this plugin writes out tab separated values instead. - * - * @author Nathan Evans - * - * Database: MySQL - */ - -#include "platform.h" -#include "gnunet_util_lib.h" -#include "dhtlog.h" - - -#define DEBUG_DHTLOG GNUNET_YES - -/** - * Maximum number of supported parameters for a prepared - * statement. Increase if needed. - */ -#define MAX_PARAM 32 - - -static unsigned long max_varchar_len; - -/** - * The configuration the DHT service is running with - */ -static const struct GNUNET_CONFIGURATION_Handle *cfg; - -#define DATE_STR_SIZE 50 - -static unsigned int topology_count; - -/** - * File(s) to dump all sql statements to. - */ -FILE *outfile; -FILE *generic_stat_outfile; -FILE *stat_outfile; -FILE *node_outfile; -FILE *query_outfile; -FILE *route_outfile; -FILE *dhtkey_outfile; -FILE *extended_topology_outfile; - -static char * -get_sql_time () -{ - static char date[DATE_STR_SIZE]; - time_t timetmp; - struct tm *tmptr; - - time (&timetmp); - memset (date, 0, DATE_STR_SIZE); - tmptr = localtime (&timetmp); - if (NULL != tmptr) - strftime (date, DATE_STR_SIZE, "%Y-%m-%d %H:%M:%S", tmptr); - else - strcpy (date, ""); - - return date; -} - -/* - * Records the current topology (number of connections, time, trial) - * - * @param num_connections how many connections are in the topology - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure - */ -int -add_topology (int num_connections) -{ - int ret; - - if (outfile == NULL) - return GNUNET_SYSERR; - - ret = - fprintf (outfile, - "insert into topology (trialuid, date, connections) values (@temp_trial, \"%s\", %d);\n", - get_sql_time (), num_connections); - if (ret < 0) - return GNUNET_SYSERR; - ret = - fprintf (outfile, - "select max(topology_uid) from topology into @temp_topology;\n"); - if (ret >= 0) - return GNUNET_OK; - return GNUNET_SYSERR; -} - -/* - * Inserts the specified round into the dhttests.rounds table - * - * @param round_type the type of round that is being started - * @param round_count counter for the round (if applicable) - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure - */ -int -add_round (unsigned int round_type, unsigned int round_count) -{ - int ret; - - if (outfile == NULL) - return GNUNET_SYSERR; - - ret = - fprintf (outfile, - "insert into rounds (trialuid, round_type, round_count, starttime) values (@temp_trial, \"%u\", \"%u\", \"%s\");\n", - round_type, round_count, get_sql_time ()); - - if (ret >= 0) - return GNUNET_OK; - return GNUNET_SYSERR; - -} - -/* - * Inserts the specified round results into the - * dhttests.processed_round_details table - * - * @param round_type the type of round that is being started - * @param round_count counter for the round (if applicable) - * @param num_messages the total number of messages initiated - * @param num_messages_succeeded the number of messages that succeeded - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure - */ -int -add_round_details (unsigned int round_type, unsigned int round_count, - unsigned int num_messages, - unsigned int num_messages_succeeded) -{ - int ret; - - if (outfile == NULL) - return GNUNET_SYSERR; - - ret = - fprintf (outfile, - "insert into processed_trial_rounds (trialuid, round_type, round_count, starttime, endtime, num_messages, num_messages_succeeded) values (@temp_trial, \"%u\", \"%u\", \"%s\", \"%s\", \"%u\", \"%u\");\n", - round_type, round_count, get_sql_time (), get_sql_time (), - num_messages, num_messages_succeeded); - - if (ret >= 0) - return GNUNET_OK; - return GNUNET_SYSERR; -} - -/* - * Records a connection between two peers in the current topology - * - * @param first one side of the connection - * @param second other side of the connection - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure - */ -int -add_extended_topology (const struct GNUNET_PeerIdentity *first, - const struct GNUNET_PeerIdentity *second) -{ - int ret; - - if (outfile == NULL) - return GNUNET_SYSERR; - - ret = - fprintf (extended_topology_outfile, - "insert into extended_topology (topology_uid, uid_first, uid_second) values (%u, %s,", - topology_count, GNUNET_h2s_full (&first->hashPubKey)); - if (ret < 0) - return GNUNET_SYSERR; - ret = - fprintf (extended_topology_outfile, "%s);\n", - GNUNET_h2s_full (&second->hashPubKey)); - - if (ret >= 0) - return GNUNET_OK; - return GNUNET_SYSERR; -} - - -/* - * Inserts the specified trial into the dhttests.trials table - * - * @param trial_info struct containing the data to insert about this trial - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure - */ -int -add_trial (struct GNUNET_DHTLOG_TrialInfo *trial_info) -{ - int ret; - - if (outfile == NULL) - return GNUNET_SYSERR; - - ret = - fprintf (outfile, - "INSERT INTO trials " - "(starttime, other_trial_identifier, numnodes, topology," - "blacklist_topology, connect_topology, connect_topology_option," - "connect_topology_option_modifier, topology_percentage, topology_probability," - "puts, gets, " - "concurrent, settle_time, num_rounds, malicious_getters," - "malicious_putters, malicious_droppers, malicious_get_frequency," - "malicious_put_frequency, stop_closest, stop_found, strict_kademlia, " - "gets_succeeded, message) " - "VALUES (\"%s\", %u, %u, %u, %u, %u, %u, %f, %f, %f, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, \"%s\");\n", - get_sql_time (), trial_info->other_identifier, - trial_info->num_nodes, trial_info->topology, - trial_info->blacklist_topology, trial_info->connect_topology, - trial_info->connect_topology_option, - trial_info->connect_topology_option_modifier, - trial_info->topology_percentage, - trial_info->topology_probability, trial_info->puts, - trial_info->gets, trial_info->concurrent, - trial_info->settle_time, trial_info->num_rounds, - trial_info->malicious_getters, trial_info->malicious_putters, - trial_info->malicious_droppers, - trial_info->malicious_get_frequency, - trial_info->malicious_put_frequency, trial_info->stop_closest, - trial_info->stop_found, trial_info->strict_kademlia, - trial_info->gets_succeeded, trial_info->message); - - if (ret < 0) - return GNUNET_SYSERR; - - ret = - fprintf (outfile, - "SELECT MAX( trialuid ) FROM trials into @temp_trial;\n"); - - if (ret >= 0) - return GNUNET_OK; - else - return GNUNET_SYSERR; -} - - -/* - * Inserts the specified stats into the dhttests.generic_stats table - * - * @param peer the peer inserting the statistic - * @param name the name of the statistic - * @param section the section of the statistic - * @param value the value of the statistic - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure - */ -int -add_generic_stat (const struct GNUNET_PeerIdentity *peer, const char *name, - const char *section, uint64_t value) -{ - if (outfile == NULL) - return GNUNET_SYSERR; - - if (peer != NULL) - fprintf (generic_stat_outfile, "TRIALUID\t%s\t%s\t%s\t%llu\n", - GNUNET_h2s_full (&peer->hashPubKey), section, name, - (unsigned long long) value); - - return GNUNET_OK; -} - - -/* - * Inserts the specified stats into the dhttests.node_statistics table - * - * @param peer the peer inserting the statistic - * @param route_requests route requests seen - * @param route_forwards route requests forwarded - * @param result_requests route result requests seen - * @param client_requests client requests initiated - * @param result_forwards route results forwarded - * @param gets get requests handled - * @param puts put requests handle - * @param data_inserts data inserted at this node - * @param find_peer_requests find peer requests seen - * @param find_peers_started find peer requests initiated at this node - * @param gets_started get requests initiated at this node - * @param puts_started put requests initiated at this node - * @param find_peer_responses_received find peer responses received locally - * @param get_responses_received get responses received locally - * @param find_peer_responses_sent find peer responses sent from this node - * @param get_responses_sent get responses sent from this node - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure - */ -int -add_stat (const struct GNUNET_PeerIdentity *peer, unsigned int route_requests, - unsigned int route_forwards, unsigned int result_requests, - unsigned int client_requests, unsigned int result_forwards, - unsigned int gets, unsigned int puts, unsigned int data_inserts, - unsigned int find_peer_requests, unsigned int find_peers_started, - unsigned int gets_started, unsigned int puts_started, - unsigned int find_peer_responses_received, - unsigned int get_responses_received, - unsigned int find_peer_responses_sent, - unsigned int get_responses_sent) -{ - int ret; - - if (outfile == NULL) - return GNUNET_SYSERR; - - if (peer != NULL) - ret = - fprintf (stat_outfile, - "TRIALUID\t%s\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\n", - GNUNET_h2s_full (&peer->hashPubKey), route_requests, - route_forwards, result_requests, client_requests, - result_forwards, gets, puts, data_inserts, find_peer_requests, - find_peers_started, gets_started, puts_started, - find_peer_responses_received, get_responses_received, - find_peer_responses_sent, get_responses_sent); - - else - return GNUNET_SYSERR; - - if (ret >= 0) - return GNUNET_OK; - else - return GNUNET_SYSERR; -} - -/* - * Inserts the specified dhtkey into the dhttests.dhtkeys table, - * stores return value of dhttests.dhtkeys.dhtkeyuid into dhtkeyuid - * - * @param dhtkeyuid return value - * @param dhtkey hashcode of key to insert - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure - */ -int -add_dhtkey (unsigned long long *dhtkeyuid, const GNUNET_HashCode * dhtkey) -{ - int ret; - - if (dhtkeyuid != NULL) - *dhtkeyuid = 0; - - if ((dhtkey_outfile == NULL) || (dhtkey == NULL)) - return GNUNET_SYSERR; - - ret = fprintf (dhtkey_outfile, "TRIALUID\t%s\n", GNUNET_h2s_full (dhtkey)); - - if (ret >= 0) - return GNUNET_OK; - else - return GNUNET_SYSERR; -} - -/* - * Inserts the specified node into the dhttests.nodes table - * - * @param nodeuid the inserted node uid - * @param node the node to insert - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure - */ -int -add_node (unsigned long long *nodeuid, struct GNUNET_PeerIdentity *node) -{ - int ret; - - if ((node == NULL) || (node_outfile == NULL)) - return GNUNET_SYSERR; - - ret = - fprintf (node_outfile, "TRIALUID\t%s\n", - GNUNET_h2s_full (&node->hashPubKey)); - fflush (node_outfile); - if (ret >= 0) - return GNUNET_OK; - return GNUNET_SYSERR; -} - -/* - * Update dhttests.trials table with current server time as end time - * - * @param gets_succeeded how many gets did the testcase report as successful - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure. - */ -int -update_trials (unsigned int gets_succeeded) -{ - int ret; - - if (outfile == NULL) - return GNUNET_SYSERR; - - ret = - fprintf (outfile, - "update trials set endtime=\"%s\", gets_succeeded=%u where trialuid = @temp_trial;\n", - get_sql_time (), gets_succeeded); - fflush (node_outfile); - if (ret >= 0) - return GNUNET_OK; - else - return GNUNET_SYSERR; -} - - -/* - * Update dhttests.nodes table setting the identified - * node as a malicious dropper. - * - * @param peer the peer that was set to be malicious - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure. - */ -int -set_malicious (struct GNUNET_PeerIdentity *peer) -{ - int ret; - - if (outfile == NULL) - return GNUNET_SYSERR; - - ret = - fprintf (outfile, - "update nodes set malicious_dropper = 1 where trialuid = @temp_trial and nodeid = \"%s\";\n", - GNUNET_h2s_full (&peer->hashPubKey)); - fflush (node_outfile); - if (ret >= 0) - return GNUNET_OK; - else - return GNUNET_SYSERR; -} - - -/* - * Update dhttests.trials table with total connections information - * - * @param totalConnections the number of connections - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure. - */ -int -add_connections (unsigned int totalConnections) -{ - int ret; - - if (outfile == NULL) - return GNUNET_SYSERR; - - ret = - fprintf (outfile, - "update trials set totalConnections = %u where trialuid = @temp_trial;\n", - totalConnections); - fflush (node_outfile); - if (ret >= 0) - return GNUNET_OK; - else - return GNUNET_SYSERR; -} - - -/* - * Update dhttests.topology table with total connections information - * - * @param connections the number of connections - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure. - */ -int -update_topology (unsigned int connections) -{ - int ret; - - if (outfile == NULL) - return GNUNET_SYSERR; - - ret = - fprintf (outfile, - "update topology set connections = %u where topology_uid = @temp_topology;\n", - connections); - topology_count++; - if (ret >= 0) - return GNUNET_OK; - else - return GNUNET_SYSERR; -} - -/* - * Inserts the specified query into the dhttests.queries table - * - * @param sqlqueruid inserted query uid - * @param queryid dht query id - * @param type type of the query - * @param hops number of hops query traveled - * @param succeeded whether or not query was successful - * @param node the node the query hit - * @param key the key of the query - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure. - */ -int -add_query (unsigned long long *sqlqueryuid, unsigned long long queryid, - unsigned int type, unsigned int hops, int succeeded, - const struct GNUNET_PeerIdentity *node, const GNUNET_HashCode * key) -{ - int ret; - - if ((outfile == NULL) || (node == NULL) || (key == NULL)) - return GNUNET_SYSERR; - - if (sqlqueryuid != NULL) - *sqlqueryuid = 0; - - ret = fprintf (query_outfile, "TRIALUID\t%s\t", GNUNET_h2s_full (key)); - - if (ret < 0) - return GNUNET_SYSERR; - - ret = - fprintf (query_outfile, "%s\t%llu\t%u\t%u\t%u\t%s\n", - GNUNET_h2s_full (&node->hashPubKey), queryid, type, hops, - succeeded, get_sql_time ()); - - if (ret >= 0) - return GNUNET_OK; - else - return GNUNET_SYSERR; -} - -/* - * Inserts the specified route information into the dhttests.routes table - * - * @param sqlqueruid inserted query uid - * @param queryid dht query id - * @param type type of the query - * @param hops number of hops query traveled - * @param succeeded whether or not query was successful - * @param node the node the query hit - * @param key the key of the query - * @param from_node the node that sent the message to node - * @param to_node next node to forward message to - * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure. - */ -int -add_route (unsigned long long *sqlqueryuid, unsigned long long queryid, - unsigned int type, unsigned int hops, int succeeded, - const struct GNUNET_PeerIdentity *node, const GNUNET_HashCode * key, - const struct GNUNET_PeerIdentity *from_node, - const struct GNUNET_PeerIdentity *to_node) -{ - int ret; - - if ((outfile == NULL) || (node == NULL) || (key == NULL)) - return GNUNET_SYSERR; - - if (sqlqueryuid != NULL) - *sqlqueryuid = 0; - - ret = fprintf (route_outfile, "TRIALUID\t%s\t", GNUNET_h2s_full (key)); - if (ret < 0) - return GNUNET_SYSERR; - - ret = fprintf (route_outfile, "%s\t", GNUNET_h2s_full (&node->hashPubKey)); - if (ret < 0) - return GNUNET_SYSERR; - if (from_node == NULL) - ret = fprintf (route_outfile, "0\t"); - else - ret = - fprintf (route_outfile, "%s\t", - GNUNET_h2s_full (&from_node->hashPubKey)); - if (ret < 0) - return GNUNET_SYSERR; - - if (to_node == NULL) - ret = - fprintf (route_outfile, "0\t%llu\t%u\t%u\t%d\n", queryid, type, hops, - succeeded); - else - ret = - fprintf (route_outfile, "%s\t%llu\t%u\t%u\t%d\n", - GNUNET_h2s_full (&to_node->hashPubKey), queryid, type, hops, - succeeded); - - if (ret >= 0) - return GNUNET_OK; - else - return GNUNET_SYSERR; -} - -/* - * Provides the dhtlog api - * - * @param c the configuration to use to connect to a server - * - * @return the handle to the server, or NULL on error - */ -void * -libgnunet_plugin_dhtlog_mysql_dump_load_init (void *cls) -{ - struct GNUNET_DHTLOG_Plugin *plugin = cls; - char *outfile_name; - char *outfile_path; - char *fn; - int dirwarn; - - cfg = plugin->cfg; - max_varchar_len = 255; - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "MySQL (DUMP) DHT Logger: initializing\n"); - - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_string (plugin->cfg, "MYSQLDUMP", "PATH", - &outfile_path)) - { - outfile_path = GNUNET_strdup (""); - } - - GNUNET_asprintf (&outfile_name, "%s%s-%d", outfile_path, "mysqldump", - getpid ()); - - fn = GNUNET_STRINGS_filename_expand (outfile_name); - - if (fn == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to get full path for `%s'\n"), outfile_name); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - return NULL; - } - - dirwarn = (GNUNET_OK != GNUNET_DISK_directory_create_for_file (fn)); - outfile = FOPEN (fn, "w"); - - if (outfile == NULL) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "fopen", fn); - if (dirwarn) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to create or access directory for log file `%s'\n"), - fn); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - GNUNET_free (fn); - return NULL; - } - - GNUNET_free (outfile_name); - GNUNET_asprintf (&outfile_name, "%s%s-%d", outfile_path, "mysqldump_nodes", - getpid ()); - GNUNET_free (fn); - fn = GNUNET_STRINGS_filename_expand (outfile_name); - - if (fn == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to get full path for `%s'\n"), outfile_name); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - return NULL; - } - - dirwarn = (GNUNET_OK != GNUNET_DISK_directory_create_for_file (fn)); - node_outfile = FOPEN (fn, "w"); - - if (node_outfile == NULL) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "fopen", fn); - if (dirwarn) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to create or access directory for log file `%s'\n"), - fn); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - GNUNET_free (fn); - return NULL; - } - - GNUNET_free (outfile_name); - GNUNET_asprintf (&outfile_name, "%s%s-%d", outfile_path, "mysqldump_routes", - getpid ()); - - GNUNET_free (fn); - fn = GNUNET_STRINGS_filename_expand (outfile_name); - - if (fn == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to get full path for `%s'\n"), outfile_name); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - return NULL; - } - - dirwarn = (GNUNET_OK != GNUNET_DISK_directory_create_for_file (fn)); - route_outfile = FOPEN (fn, "w"); - - if (route_outfile == NULL) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "fopen", fn); - if (dirwarn) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to create or access directory for log file `%s'\n"), - fn); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - GNUNET_free (fn); - return NULL; - } - - GNUNET_free (outfile_name); - GNUNET_asprintf (&outfile_name, "%s%s-%d", outfile_path, "mysqldump_queries", - getpid ()); - - GNUNET_free (fn); - fn = GNUNET_STRINGS_filename_expand (outfile_name); - - if (fn == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to get full path for `%s'\n"), outfile_name); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - return NULL; - } - - dirwarn = (GNUNET_OK != GNUNET_DISK_directory_create_for_file (fn)); - query_outfile = FOPEN (fn, "w"); - - if (query_outfile == NULL) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "fopen", fn); - if (dirwarn) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to create or access directory for log file `%s'\n"), - fn); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - GNUNET_free (fn); - return NULL; - } - - GNUNET_free (outfile_name); - GNUNET_asprintf (&outfile_name, "%s%s-%d", outfile_path, "mysqldump_stats", - getpid ()); - - GNUNET_free (fn); - fn = GNUNET_STRINGS_filename_expand (outfile_name); - - if (fn == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to get full path for `%s'\n"), outfile_name); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - return NULL; - } - - dirwarn = (GNUNET_OK != GNUNET_DISK_directory_create_for_file (fn)); - stat_outfile = FOPEN (fn, "w"); - - if (stat_outfile == NULL) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "fopen", fn); - if (dirwarn) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to create or access directory for log file `%s'\n"), - fn); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - GNUNET_free (fn); - return NULL; - } - - GNUNET_free (outfile_name); - GNUNET_asprintf (&outfile_name, "%s%s-%d", outfile_path, - "mysqldump_generic_stats", getpid ()); - GNUNET_free (fn); - fn = GNUNET_STRINGS_filename_expand (outfile_name); - - if (fn == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to get full path for `%s'\n"), outfile_name); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - return NULL; - } - - dirwarn = (GNUNET_OK != GNUNET_DISK_directory_create_for_file (fn)); - generic_stat_outfile = FOPEN (fn, "w"); - - if (generic_stat_outfile == NULL) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "fopen", fn); - if (dirwarn) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to create or access directory for log file `%s'\n"), - fn); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - GNUNET_free (fn); - return NULL; - } - - GNUNET_free (outfile_name); - GNUNET_asprintf (&outfile_name, "%s%s-%d", outfile_path, "mysqldump_dhtkey", - getpid ()); - GNUNET_free (fn); - fn = GNUNET_STRINGS_filename_expand (outfile_name); - - if (fn == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to get full path for `%s'\n"), outfile_name); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - return NULL; - } - - dirwarn = (GNUNET_OK != GNUNET_DISK_directory_create_for_file (fn)); - dhtkey_outfile = FOPEN (fn, "w"); - - if (dhtkey_outfile == NULL) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "fopen", fn); - if (dirwarn) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to create or access directory for log file `%s'\n"), - fn); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - GNUNET_free (fn); - return NULL; - } - - GNUNET_free (outfile_name); - GNUNET_asprintf (&outfile_name, "%s%s-%d", outfile_path, - "mysqldump_extended_topology", getpid ()); - GNUNET_free (fn); - fn = GNUNET_STRINGS_filename_expand (outfile_name); - - if (fn == NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to get full path for `%s'\n"), outfile_name); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - return NULL; - } - - dirwarn = (GNUNET_OK != GNUNET_DISK_directory_create_for_file (fn)); - extended_topology_outfile = FOPEN (fn, "w"); - - if (extended_topology_outfile == NULL) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "fopen", fn); - if (dirwarn) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to create or access directory for log file `%s'\n"), - fn); - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - GNUNET_free (fn); - return NULL; - } - - GNUNET_free (outfile_path); - GNUNET_free (outfile_name); - GNUNET_free (fn); - - GNUNET_assert (plugin->dhtlog_api == NULL); - plugin->dhtlog_api = GNUNET_malloc (sizeof (struct GNUNET_DHTLOG_Handle)); - plugin->dhtlog_api->insert_trial = &add_trial; - plugin->dhtlog_api->insert_stat = &add_stat; - plugin->dhtlog_api->insert_round = &add_round; - plugin->dhtlog_api->insert_round_details = &add_round_details; - plugin->dhtlog_api->insert_query = &add_query; - plugin->dhtlog_api->update_trial = &update_trials; - plugin->dhtlog_api->insert_route = &add_route; - plugin->dhtlog_api->insert_node = &add_node; - plugin->dhtlog_api->insert_dhtkey = &add_dhtkey; - plugin->dhtlog_api->update_connections = &add_connections; - plugin->dhtlog_api->insert_topology = &add_topology; - plugin->dhtlog_api->insert_extended_topology = &add_extended_topology; - plugin->dhtlog_api->update_topology = &update_topology; - plugin->dhtlog_api->set_malicious = &set_malicious; - plugin->dhtlog_api->add_generic_stat = &add_generic_stat; - - return plugin; -} - -/** - * Shutdown the plugin. - */ -void * -libgnunet_plugin_dhtlog_mysql_dump_load_done (void *cls) -{ - struct GNUNET_DHTLOG_Handle *dhtlog_api = cls; - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "MySQL DHT Logger: database shutdown\n"); - GNUNET_assert (dhtlog_api != NULL); - - fclose (outfile); - fclose (node_outfile); - fclose (query_outfile); - fclose (route_outfile); - fclose (stat_outfile); - fclose (generic_stat_outfile); - fclose (extended_topology_outfile); - GNUNET_free (dhtlog_api); - return NULL; -} - -/* end of plugin_dhtlog_mysql_dump_load.c */ diff --git a/src/dht/test_dhtlog.c b/src/dht/test_dhtlog.c deleted file mode 100644 index 89ec97d6c..000000000 --- a/src/dht/test_dhtlog.c +++ /dev/null @@ -1,256 +0,0 @@ -/* - This file is part of GNUnet. - (C) 2006, 2009 Christian Grothoff (and other contributing authors) - - GNUnet is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, or (at your - option) any later version. - - GNUnet is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -/* - * @file src/dht/test_dhtlog.c - * @brief Test of the dhtlog service - * @author Nathan Evans - */ - -#include "platform.h" -#include "gnunet_util_lib.h" -#include "gnunet_protocols.h" -#include "dhtlog.h" - -#define VERBOSE GNUNET_NO - -static int ok; - -#define CHECK(a) if (a != GNUNET_OK) return a -/** - * Actual test of the service operations - */ -static int -test (struct GNUNET_DHTLOG_Handle *api) -{ - struct GNUNET_PeerIdentity p1; - struct GNUNET_PeerIdentity p2; - struct GNUNET_PeerIdentity p3; - struct GNUNET_PeerIdentity p4; - struct GNUNET_DHTLOG_TrialInfo trial_info; - GNUNET_HashCode k1; - GNUNET_HashCode k2; - int ret; - unsigned int i = 42; - unsigned long long sqlqueryuid; - unsigned long long sqlrouteuid = 0; - unsigned long long nodeuid = 0; - unsigned long long internaluid = 1010223344LL; - unsigned long long dhtkeyuid = 0; - - memset (&p1.hashPubKey, 3, sizeof (GNUNET_HashCode)); - memset (&p2.hashPubKey, 4, sizeof (GNUNET_HashCode)); - memset (&p3.hashPubKey, 5, sizeof (GNUNET_HashCode)); - memset (&p4.hashPubKey, 6, sizeof (GNUNET_HashCode)); - - memset (&k1, 0, sizeof (GNUNET_HashCode)); - memset (&k2, 1, sizeof (GNUNET_HashCode)); - memset (&trial_info, 0, sizeof (struct GNUNET_DHTLOG_TrialInfo)); - trial_info.other_identifier = 777; - trial_info.num_nodes = i; - trial_info.topology = 5; - trial_info.blacklist_topology = 4; - trial_info.connect_topology = 3; - trial_info.connect_topology_option = 2; - trial_info.connect_topology_option_modifier = .75; - trial_info.topology_percentage = .25; - trial_info.topology_probability = .5; - trial_info.puts = 42; - trial_info.gets = 14; - trial_info.concurrent = 5; - trial_info.settle_time = 1; - trial_info.num_rounds = 12; - trial_info.malicious_getters = 0; - trial_info.malicious_putters = 0; - trial_info.malicious_droppers = 0; - trial_info.malicious_get_frequency = 1; - trial_info.malicious_put_frequency = 0; - trial_info.stop_closest = 1; - trial_info.stop_found = 0; - trial_info.strict_kademlia = 1; - trial_info.message = GNUNET_strdup ("TEST INSERT_TRIAL"); - ret = api->insert_trial (&trial_info); - GNUNET_free (trial_info.message); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert trial succeeded!\n"); -#endif - ret = api->insert_topology (500); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert topology succeeded!\n"); -#endif - ret = api->insert_node (&nodeuid, &p1); - CHECK (ret); - ret = api->insert_node (&nodeuid, &p2); - CHECK (ret); - ret = api->insert_node (&nodeuid, &p3); - CHECK (ret); - ret = api->insert_node (&nodeuid, &p4); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert node succeeded!\n"); -#endif - ret = api->set_malicious (&p1); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Set malicious succeeded!\n"); -#endif - ret = api->insert_topology (0); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert topology succeeded!\n"); -#endif - ret = api->insert_extended_topology (&p1, &p2); - CHECK (ret); - ret = api->insert_extended_topology (&p3, &p4); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert extended topology succeeded!\n"); -#endif - ret = api->update_topology (101); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Update topology succeeded!\n"); -#endif - ret = api->insert_dhtkey (&dhtkeyuid, &k1); - CHECK (ret); - ret = api->insert_dhtkey (&dhtkeyuid, &k2); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert dhtkey succeeded!\n"); -#endif - ret = api->insert_query (&sqlqueryuid, internaluid, 2, 4, 0, &p2, &k1); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert query succeeded!\n"); -#endif - ret = - api->insert_route (&sqlrouteuid, sqlqueryuid, 1, 1, DHTLOG_GET, &p1, &k2, - &p4, &p3); - CHECK (ret); - ret = - api->insert_route (&sqlrouteuid, sqlqueryuid, 2, 0, DHTLOG_PUT, &p3, &k1, - &p4, &p2); - CHECK (ret); - ret = - api->insert_route (&sqlrouteuid, sqlqueryuid, 3, 1, DHTLOG_ROUTE, &p3, - &k2, &p2, NULL); - CHECK (ret); - ret = - api->insert_route (&sqlrouteuid, sqlqueryuid, 4, 7, DHTLOG_ROUTE, &p3, - &k2, NULL, NULL); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert route succeeded!\n"); -#endif - sleep (1); - ret = - api->insert_stat (&p1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17); - CHECK (ret); - ret = - api->insert_stat (&p2, 12, 23, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert stat succeeded!\n"); -#endif - ret = api->update_trial (787); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Update trial succeeded!\n"); -#endif - ret = api->add_generic_stat (&p2, "nonsense", "section", 77765); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert generic stat succeeded!\n"); -#endif - ret = api->insert_round (401, 507); - CHECK (ret); - ret = api->insert_round_details (402, 507, 1123, 985); - CHECK (ret); -#if VERBOSE - fprintf (stderr, "Insert round succeeded!\n"); -#endif - return 0; -} - - - -static void -run (void *cls, char *const *args, const char *cfgfile, - const struct GNUNET_CONFIGURATION_Handle *cfg) -{ - struct GNUNET_DHTLOG_Handle *api; - - ok = 0; - api = GNUNET_DHTLOG_connect (cfg); - - if (api == NULL) - { - ok = 1; - return; - } - ok = test (api); - - GNUNET_DHTLOG_disconnect (api); -} - - -static int -check () -{ - char *const argv[] = { "test-dhtlog-api", - "-c", - "test_dhtlog_data.conf", -#if VERBOSE - "-L", "DEBUG", -#endif - NULL - }; - struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_OPTION_END - }; - GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv, - "test-dhtlog-api", "nohelp", options, &run, NULL); - if (ok != 0) - fprintf (stderr, "Test failed with error code: %d\n", ok); - return ok; -} - - -int -main (int argc, char *argv[]) -{ - int ret; - - GNUNET_log_setup ("test-datacache-api", -#if VERBOSE - "DEBUG", -#else - "WARNING", -#endif - NULL); - ret = check (); - - return ret; -} - -/* end of test_dhtlog.c */ -- 2.25.1