X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fregex%2Fgnunet-regex-simulation-profiler.c;h=0f955f7b5cc5ce00af782a2e56237a82e876667b;hb=3b680a20ab2cbb98cfa658d85be7a44baaf95d2c;hp=f0010801108c26e4e5ba78f0bc6bfee7b0b46cf5;hpb=be4c79e4cd4a8f118c5577874f0c95e253359595;p=oweals%2Fgnunet.git diff --git a/src/regex/gnunet-regex-simulation-profiler.c b/src/regex/gnunet-regex-simulation-profiler.c index f00108011..0f955f7b5 100644 --- a/src/regex/gnunet-regex-simulation-profiler.c +++ b/src/regex/gnunet-regex-simulation-profiler.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2011, 2012 Christian Grothoff (and other contributing authors) + Copyright (C) 2011, 2012 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 @@ -14,8 +14,8 @@ 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. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -88,20 +88,10 @@ struct ProgressMeter */ static struct ProgressMeter *meter; -/** - * Abort task identifier. - */ -static GNUNET_SCHEDULER_TaskIdentifier abort_task; - -/** - * Shutdown task identifier. - */ -static GNUNET_SCHEDULER_TaskIdentifier shutdown_task; - /** * Scan task identifier; */ -static GNUNET_SCHEDULER_TaskIdentifier scan_task; +static struct GNUNET_SCHEDULER_Task *scan_task; /** * Global testing status. @@ -240,8 +230,8 @@ update_meter (struct ProgressMeter *meter) * * @param meter the meter to reset * - * @return GNUNET_YES if meter reset, - * GNUNET_SYSERR on error + * @return #GNUNET_YES if meter reset, + * #GNUNET_SYSERR on error */ static int reset_meter (struct ProgressMeter *meter) @@ -271,52 +261,61 @@ free_meter (struct ProgressMeter *meter) * Shutdown task. * * @param cls NULL - * @param tc the task context */ static void -do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - shutdown_task = GNUNET_SCHEDULER_NO_TASK; - if (GNUNET_SCHEDULER_NO_TASK != abort_task) - GNUNET_SCHEDULER_cancel (abort_task); +do_shutdown (void *cls) +{ if (NULL != mysql_ctx) + { GNUNET_MYSQL_context_destroy (mysql_ctx); + mysql_ctx = NULL; + } if (NULL != meter) + { free_meter (meter); - - GNUNET_SCHEDULER_shutdown (); /* Stop scheduler to shutdown testbed run */ + meter = NULL; + } } /** - * abort task to run on test timed out + * Abort task to run on test timed out. + * + * FIXME: this doesn't actually work, it used to cancel + * the already running 'scan_task', but now that should + * always be NULL and do nothing. We instead need to set + * a global variable and abort scan_task internally, not + * via scheduler. * * @param cls NULL - * @param tc the task context */ static void -do_abort (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +do_abort (void *cls) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Aborting\n"); - abort_task = GNUNET_SCHEDULER_NO_TASK; - GNUNET_SCHEDULER_cancel (scan_task); - scan_task = GNUNET_SCHEDULER_NO_TASK; + if (NULL != scan_task) + { + GNUNET_SCHEDULER_cancel (scan_task); + scan_task = NULL; + } result = GNUNET_SYSERR; - GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); + GNUNET_SCHEDULER_shutdown (); } /** - * Dummy function for prepared select. Always return GNUNET_OK. + * Dummy function for prepared select. Always returns #GNUNET_OK. * * @param cls closure * @param num_values number of values. * @param values returned values from select stmt. * - * @return GNUNET_OK + * @return #GNUNET_OK */ static int -return_ok (void *cls, unsigned int num_values, MYSQL_BIND * values) +return_ok (void *cls, + unsigned int num_values, + MYSQL_BIND * values) { return GNUNET_OK; } @@ -328,13 +327,16 @@ return_ok (void *cls, unsigned int num_values, MYSQL_BIND * values) * @param cls closure. * @param key hash for current state. * @param proof proof for current state. - * @param accepting GNUNET_YES if this is an accepting state, GNUNET_NO if not. + * @param accepting #GNUNET_YES if this is an accepting state, #GNUNET_NO if not. * @param num_edges number of edges leaving current state. * @param edges edges leaving current state. */ static void -regex_iterator (void *cls, const struct GNUNET_HashCode *key, const char *proof, - int accepting, unsigned int num_edges, +regex_iterator (void *cls, + const struct GNUNET_HashCode *key, + const char *proof, + int accepting, + unsigned int num_edges, const struct REGEX_BLOCK_Edge *edges) { unsigned int i; @@ -455,7 +457,7 @@ regex_iterator (void *cls, const struct GNUNET_HashCode *key, const char *proof, * each state into a MySQL database. * * @param regex regular expression. - * @return GNUNET_OK on success, GNUNET_SYSERR on failure. + * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure. */ static int announce_regex (const char *regex) @@ -463,18 +465,20 @@ announce_regex (const char *regex) struct REGEX_INTERNAL_Automaton *dfa; dfa = - REGEX_INTERNAL_construct_dfa (regex, strlen (regex), max_path_compression); + REGEX_INTERNAL_construct_dfa (regex, + strlen (regex), + max_path_compression); if (NULL == dfa) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to create DFA for regex %s\n", + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Failed to create DFA for regex %s\n", regex); - abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL); + GNUNET_SCHEDULER_add_now (&do_abort, NULL); return GNUNET_SYSERR; } - - REGEX_INTERNAL_iterate_all_edges (dfa, ®ex_iterator, NULL); - + REGEX_INTERNAL_iterate_all_edges (dfa, + ®ex_iterator, NULL); REGEX_INTERNAL_automaton_destroy (dfa); return GNUNET_OK; @@ -486,8 +490,8 @@ announce_regex (const char *regex) * * @param cls closure * @param filename complete filename (absolute path) - * @return GNUNET_OK to continue to iterate, - * GNUNET_SYSERR to abort iteration with error! + * @return #GNUNET_OK to continue to iterate, + * #GNUNET_SYSERR to abort iteration with error! */ static int policy_filename_cb (void *cls, const char *filename) @@ -500,17 +504,20 @@ policy_filename_cb (void *cls, const char *filename) GNUNET_assert (NULL != filename); - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Announcing regexes from file %s\n", + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Announcing regexes from file %s\n", filename); if (GNUNET_YES != GNUNET_DISK_file_test (filename)) { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Could not find policy file %s\n", + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Could not find policy file %s\n", filename); return GNUNET_OK; } if (GNUNET_OK != - GNUNET_DISK_file_size (filename, &filesize, GNUNET_YES, GNUNET_YES)) + GNUNET_DISK_file_size (filename, &filesize, + GNUNET_YES, GNUNET_YES)) filesize = 0; if (0 == filesize) { @@ -522,7 +529,8 @@ policy_filename_cb (void *cls, const char *filename) if (filesize != GNUNET_DISK_fn_read (filename, data, filesize)) { GNUNET_free (data); - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Could not read policy file %s.\n", + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Could not read policy file %s.\n", filename); return GNUNET_OK; } @@ -547,11 +555,13 @@ policy_filename_cb (void *cls, const char *filename) data[offset] = '\0'; GNUNET_asprintf (®ex, "%s(%s)", regex_prefix, data); GNUNET_assert (NULL != regex); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Announcing regex: %s\n", regex); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Announcing regex: %s\n", regex); if (GNUNET_OK != announce_regex (regex)) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not announce regex %s\n", + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Could not announce regex %s\n", regex); } GNUNET_free (regex); @@ -564,16 +574,16 @@ policy_filename_cb (void *cls, const char *filename) * Iterate over files contained in policy_dir. * * @param cls NULL - * @param tc the task context */ static void -do_directory_scan (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +do_directory_scan (void *cls) { struct GNUNET_TIME_Absolute start_time; struct GNUNET_TIME_Relative duration; char *stmt; /* Create an MySQL prepared statement for the inserts */ + scan_task = NULL; GNUNET_asprintf (&stmt, INSERT_EDGE_STMT, table_name); stmt_handle = GNUNET_MYSQL_statement_prepare (mysql_ctx, stmt); GNUNET_free (stmt); @@ -584,10 +594,13 @@ do_directory_scan (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_assert (NULL != stmt_handle); - meter = - create_meter (num_policy_files, "Announcing policy files\n", GNUNET_YES); + meter = create_meter (num_policy_files, + "Announcing policy files\n", + GNUNET_YES); start_time = GNUNET_TIME_absolute_get (); - GNUNET_DISK_directory_scan (policy_dir, &policy_filename_cb, stmt_handle); + GNUNET_DISK_directory_scan (policy_dir, + &policy_filename_cb, + stmt_handle); duration = GNUNET_TIME_absolute_get_duration (start_time); reset_meter (meter); free_meter (meter); @@ -595,12 +608,13 @@ do_directory_scan (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) printf ("Announced %u files containing %u policies in %s\n" "Duplicate transitions: %llu\nMerged states: %llu\n", - num_policy_files, num_policies, + num_policy_files, + num_policies, GNUNET_STRINGS_relative_time_to_string (duration, GNUNET_NO), - num_merged_transitions, num_merged_states); - + num_merged_transitions, + num_merged_states); result = GNUNET_OK; - shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); + GNUNET_SCHEDULER_shutdown (); } @@ -613,7 +627,9 @@ do_directory_scan (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) * @param config configuration */ static void -run (void *cls, char *const *args, const char *cfgfile, +run (void *cls, + char *const *args, + const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *config) { if (NULL == args[0]) @@ -623,7 +639,8 @@ run (void *cls, char *const *args, const char *cfgfile, result = GNUNET_SYSERR; return; } - if (GNUNET_YES != GNUNET_DISK_directory_test (args[0], GNUNET_YES)) + if (GNUNET_YES != + GNUNET_DISK_directory_test (args[0], GNUNET_YES)) { fprintf (stderr, _("Specified policies directory does not exist. Exiting.\n")); @@ -632,7 +649,8 @@ run (void *cls, char *const *args, const char *cfgfile, } policy_dir = args[0]; - num_policy_files = GNUNET_DISK_directory_scan (policy_dir, NULL, NULL); + num_policy_files = GNUNET_DISK_directory_scan (policy_dir, + NULL, NULL); meter = NULL; if (NULL == table_name) @@ -645,32 +663,29 @@ run (void *cls, char *const *args, const char *cfgfile, mysql_ctx = GNUNET_MYSQL_context_create (config, "regex-mysql"); if (NULL == mysql_ctx) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to create mysql context\n"); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Failed to create mysql context\n"); result = GNUNET_SYSERR; return; } if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_string (config, "regex-mysql", - "REGEX_PREFIX", ®ex_prefix)) + GNUNET_CONFIGURATION_get_value_string (config, + "regex-mysql", + "REGEX_PREFIX", + ®ex_prefix)) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _ - ("%s service is lacking key configuration settings (%s). Exiting.\n"), - "regexprofiler", "regex_prefix"); + GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, + "regex-mysql", + "REGEX_PREFIX"); result = GNUNET_SYSERR; return; } - result = GNUNET_OK; - + GNUNET_SCHEDULER_add_shutdown (&do_shutdown, + NULL); scan_task = GNUNET_SCHEDULER_add_now (&do_directory_scan, NULL); - - /* Scheduled the task to clean up when shutdown is called */ - shutdown_task = - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &do_shutdown, - NULL); }