diff options
author | Martin Schanzenbach <schanzen@gnunet.org> | 2022-10-21 10:37:24 +0900 |
---|---|---|
committer | Martin Schanzenbach <schanzen@gnunet.org> | 2022-10-21 10:37:24 +0900 |
commit | 23d5c0716781f2f6720e3c549cc662e70ad78b17 (patch) | |
tree | 0385bbe77439ac54fad768e2568ca26ac0ab03fe /src/zonemaster/gnunet-service-zonemaster.c | |
parent | 34c3a6c5ae3a7ce2b4ec8b2f13ee934cb7816f5a (diff) | |
download | gnunet-23d5c0716781f2f6720e3c549cc662e70ad78b17.tar.gz gnunet-23d5c0716781f2f6720e3c549cc662e70ad78b17.zip |
-fix notification processing zonemaster; give zonemaster some time in GNS tests; fix GNS tests for new gnunet.org IP
Diffstat (limited to 'src/zonemaster/gnunet-service-zonemaster.c')
-rw-r--r-- | src/zonemaster/gnunet-service-zonemaster.c | 165 |
1 files changed, 92 insertions, 73 deletions
diff --git a/src/zonemaster/gnunet-service-zonemaster.c b/src/zonemaster/gnunet-service-zonemaster.c index 029abe208..0413fff32 100644 --- a/src/zonemaster/gnunet-service-zonemaster.c +++ b/src/zonemaster/gnunet-service-zonemaster.c | |||
@@ -387,6 +387,17 @@ static struct CacheOperation *cop_head; | |||
387 | static struct CacheOperation *cop_tail; | 387 | static struct CacheOperation *cop_tail; |
388 | 388 | ||
389 | 389 | ||
390 | static void | ||
391 | free_job (struct OpenSignJob *job) | ||
392 | { | ||
393 | if (job->block != job->block_priv) | ||
394 | GNUNET_free (job->block_priv); | ||
395 | GNUNET_free (job->block); | ||
396 | if (NULL != job->label) | ||
397 | GNUNET_free (job->label); | ||
398 | GNUNET_free (job); | ||
399 | } | ||
400 | |||
390 | /** | 401 | /** |
391 | * Task run during shutdown. | 402 | * Task run during shutdown. |
392 | * | 403 | * |
@@ -398,6 +409,7 @@ shutdown_task (void *cls) | |||
398 | { | 409 | { |
399 | struct DhtPutActivity *ma; | 410 | struct DhtPutActivity *ma; |
400 | struct CacheOperation *cop; | 411 | struct CacheOperation *cop; |
412 | struct OpenSignJob *job; | ||
401 | 413 | ||
402 | (void) cls; | 414 | (void) cls; |
403 | in_shutdown == GNUNET_YES; | 415 | in_shutdown == GNUNET_YES; |
@@ -416,6 +428,22 @@ shutdown_task (void *cls) | |||
416 | GNUNET_free (cop); | 428 | GNUNET_free (cop); |
417 | } | 429 | } |
418 | 430 | ||
431 | while (NULL != (job = jobs_head)) | ||
432 | { | ||
433 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
434 | "Removing incomplete jobs\n"); | ||
435 | GNUNET_CONTAINER_DLL_remove (jobs_head, jobs_tail, job); | ||
436 | free_job (job); | ||
437 | } | ||
438 | |||
439 | while (NULL != (job = results_head)) | ||
440 | { | ||
441 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
442 | "Removing incomplete jobs\n"); | ||
443 | GNUNET_CONTAINER_DLL_remove (results_head, results_tail, job); | ||
444 | free_job (job); | ||
445 | } | ||
446 | |||
419 | while (NULL != (ma = it_head)) | 447 | while (NULL != (ma = it_head)) |
420 | { | 448 | { |
421 | if (NULL != ma->ph) | 449 | if (NULL != ma->ph) |
@@ -771,18 +799,6 @@ dht_put_continuation (void *cls) | |||
771 | } | 799 | } |
772 | 800 | ||
773 | 801 | ||
774 | static void | ||
775 | free_job (struct OpenSignJob *job) | ||
776 | { | ||
777 | if (job->block != job->block_priv) | ||
778 | GNUNET_free (job->block_priv); | ||
779 | GNUNET_free (job->block); | ||
780 | if (NULL != job->label) | ||
781 | GNUNET_free (job->label); | ||
782 | GNUNET_free (job); | ||
783 | } | ||
784 | |||
785 | |||
786 | /** | 802 | /** |
787 | * Store GNS records in the DHT. | 803 | * Store GNS records in the DHT. |
788 | * | 804 | * |
@@ -850,8 +866,7 @@ perform_dht_put (const struct GNUNET_IDENTITY_PrivateKey *key, | |||
850 | block_size = GNUNET_GNSRECORD_block_get_size (block); | 866 | block_size = GNUNET_GNSRECORD_block_get_size (block); |
851 | GNUNET_assert (0 == pthread_mutex_lock (&jobs_lock)); | 867 | GNUNET_assert (0 == pthread_mutex_lock (&jobs_lock)); |
852 | struct OpenSignJob *job = GNUNET_new (struct OpenSignJob); | 868 | struct OpenSignJob *job = GNUNET_new (struct OpenSignJob); |
853 | job->block = GNUNET_malloc (block_size); // FIXME this does not need to be copied, can be freed by worker | 869 | job->block = block; |
854 | memcpy (job->block, block, block_size); | ||
855 | job->block_size = block_size; | 870 | job->block_size = block_size; |
856 | job->block_priv = block_priv; | 871 | job->block_priv = block_priv; |
857 | job->zone = *key; | 872 | job->zone = *key; |
@@ -859,10 +874,10 @@ perform_dht_put (const struct GNUNET_IDENTITY_PrivateKey *key, | |||
859 | job->label = GNUNET_strdup (label); | 874 | job->label = GNUNET_strdup (label); |
860 | job->expire_pub = expire_pub; | 875 | job->expire_pub = expire_pub; |
861 | GNUNET_CONTAINER_DLL_insert (jobs_head, jobs_tail, job); | 876 | GNUNET_CONTAINER_DLL_insert (jobs_head, jobs_tail, job); |
877 | GNUNET_assert (0 == pthread_cond_signal (&empty_jobs)); | ||
862 | GNUNET_assert (0 == pthread_mutex_unlock (&jobs_lock)); | 878 | GNUNET_assert (0 == pthread_mutex_unlock (&jobs_lock)); |
863 | pthread_cond_signal (&empty_jobs); | ||
864 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 879 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
865 | "Storing %u record(s) for label `%s' in DHT with expiration `%s'\n", | 880 | "Creating job with %u record(s) for label `%s', expiration `%s'\n", |
866 | rd_public_count, | 881 | rd_public_count, |
867 | label, | 882 | label, |
868 | GNUNET_STRINGS_absolute_time_to_string (expire)); | 883 | GNUNET_STRINGS_absolute_time_to_string (expire)); |
@@ -884,8 +899,6 @@ initiate_put_from_pipe_trigger (void *cls) | |||
884 | ssize_t nf_count; | 899 | ssize_t nf_count; |
885 | 900 | ||
886 | pipe_read_task = NULL; | 901 | pipe_read_task = NULL; |
887 | GNUNET_assert (0 == pthread_mutex_lock (&results_lock)); | ||
888 | job = results_head; | ||
889 | np_fh = GNUNET_DISK_pipe_handle (notification_pipe, | 902 | np_fh = GNUNET_DISK_pipe_handle (notification_pipe, |
890 | GNUNET_DISK_PIPE_END_READ); | 903 | GNUNET_DISK_PIPE_END_READ); |
891 | pipe_read_task = | 904 | pipe_read_task = |
@@ -895,50 +908,54 @@ initiate_put_from_pipe_trigger (void *cls) | |||
895 | notification_pipe_cb, | 908 | notification_pipe_cb, |
896 | NULL); | 909 | NULL); |
897 | /* empty queue */ | 910 | /* empty queue */ |
898 | while (GNUNET_SYSERR != | 911 | nf_count = GNUNET_DISK_file_read (np_fh, buf, sizeof (buf)); |
899 | (nf_count = GNUNET_DISK_file_read (np_fh, buf, sizeof (buf)))) | 912 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Read %lld notifications from pipe\n", |
900 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Read %lld notifications from pipe\n", | 913 | (long long) nf_count); |
901 | (long long) nf_count); | 914 | for (int i = 0; i < nf_count; i++) |
902 | if (NULL == job) | ||
903 | { | 915 | { |
904 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 916 | GNUNET_assert (0 == pthread_mutex_lock (&results_lock)); |
905 | "Hmm... no results. Back to sleep.\n"); | 917 | job = results_head; |
918 | if (NULL == job) | ||
919 | { | ||
920 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
921 | "Hmm... no results. Back to sleep.\n"); | ||
922 | GNUNET_assert (0 == pthread_mutex_unlock (&results_lock)); | ||
923 | return; | ||
924 | } | ||
925 | GNUNET_CONTAINER_DLL_remove (results_head, results_tail, job); | ||
906 | GNUNET_assert (0 == pthread_mutex_unlock (&results_lock)); | 926 | GNUNET_assert (0 == pthread_mutex_unlock (&results_lock)); |
907 | return; | 927 | GNUNET_GNSRECORD_query_from_private_key (&job->zone, |
908 | } | 928 | job->label, |
909 | GNUNET_CONTAINER_DLL_remove (results_head, results_tail, job); | 929 | &query); |
910 | GNUNET_assert (0 == pthread_mutex_unlock (&results_lock)); | 930 | GNUNET_STATISTICS_update (statistics, |
911 | GNUNET_GNSRECORD_query_from_private_key (&job->zone, | 931 | "DHT put operations initiated", |
912 | job->label, | 932 | 1, |
913 | &query); | 933 | GNUNET_NO); |
914 | GNUNET_STATISTICS_update (statistics, | 934 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
915 | "DHT put operations initiated", | 935 | "Storing record(s) for label `%s' in DHT under key %s\n", |
916 | 1, | 936 | job->label, |
917 | GNUNET_NO); | 937 | GNUNET_h2s (&query)); |
918 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 938 | job->ma->ph = GNUNET_DHT_put (dht_handle, |
919 | "Storing record(s) for label `%s' in DHT under key %s\n", | 939 | &query, |
920 | job->label, | 940 | DHT_GNS_REPLICATION_LEVEL, |
921 | GNUNET_h2s (&query)); | 941 | GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE, |
922 | job->ma->ph = GNUNET_DHT_put (dht_handle, | 942 | GNUNET_BLOCK_TYPE_GNS_NAMERECORD, |
923 | &query, | 943 | job->block_size, |
924 | DHT_GNS_REPLICATION_LEVEL, | 944 | job->block, |
925 | GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE, | 945 | job->expire_pub, |
926 | GNUNET_BLOCK_TYPE_GNS_NAMERECORD, | 946 | &dht_put_continuation, |
927 | job->block_size, | 947 | job->ma); |
928 | job->block, | 948 | if (NULL == job->ma->ph) |
929 | job->expire_pub, | 949 | { |
930 | &dht_put_continuation, | 950 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
931 | job->ma); | 951 | "Could not perform DHT PUT, is the DHT running?\n"); |
932 | if (NULL == job->ma->ph) | 952 | GNUNET_free (job->ma); |
933 | { | 953 | free_job (job); |
934 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 954 | return; |
935 | "Could not perform DHT PUT, is the DHT running?\n"); | 955 | } |
936 | GNUNET_free (job->ma); | 956 | refresh_block (job->block_priv); |
937 | free_job (job); | 957 | free_job (job); |
938 | return; | ||
939 | } | 958 | } |
940 | refresh_block (job->block_priv); | ||
941 | free_job (job); | ||
942 | return; | 959 | return; |
943 | } | 960 | } |
944 | 961 | ||
@@ -1213,8 +1230,8 @@ perform_dht_put_monitor (const struct GNUNET_IDENTITY_PrivateKey *key, | |||
1213 | job->label = GNUNET_strdup (label); | 1230 | job->label = GNUNET_strdup (label); |
1214 | job->expire_pub = expire_pub; | 1231 | job->expire_pub = expire_pub; |
1215 | GNUNET_CONTAINER_DLL_insert (jobs_head, jobs_tail, job); | 1232 | GNUNET_CONTAINER_DLL_insert (jobs_head, jobs_tail, job); |
1233 | GNUNET_assert (0 == pthread_cond_signal (&empty_jobs)); | ||
1216 | GNUNET_assert (0 == pthread_mutex_unlock (&jobs_lock)); | 1234 | GNUNET_assert (0 == pthread_mutex_unlock (&jobs_lock)); |
1217 | pthread_cond_signal (&empty_jobs); | ||
1218 | } | 1235 | } |
1219 | 1236 | ||
1220 | 1237 | ||
@@ -1305,25 +1322,27 @@ sign_worker (void *cls) | |||
1305 | { | 1322 | { |
1306 | GNUNET_assert (0 == pthread_mutex_lock (&jobs_lock)); | 1323 | GNUNET_assert (0 == pthread_mutex_lock (&jobs_lock)); |
1307 | while (NULL == jobs_head) | 1324 | while (NULL == jobs_head) |
1308 | pthread_cond_wait (&empty_jobs, &jobs_lock); | 1325 | GNUNET_assert (0 == pthread_cond_wait (&empty_jobs, &jobs_lock)); |
1326 | if (GNUNET_YES == in_shutdown) | ||
1327 | { | ||
1328 | GNUNET_assert (0 == pthread_mutex_unlock (&jobs_lock)); | ||
1329 | return NULL; | ||
1330 | } | ||
1309 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1331 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1310 | "Taking on Job for %s\n", jobs_head->label); | 1332 | "Taking on Job for %s\n", jobs_head->label); |
1311 | job = jobs_head; | 1333 | job = jobs_head; |
1312 | GNUNET_CONTAINER_DLL_remove (jobs_head, jobs_tail, job); | 1334 | GNUNET_CONTAINER_DLL_remove (jobs_head, jobs_tail, job); |
1313 | GNUNET_assert (0 == pthread_mutex_unlock (&jobs_lock)); | 1335 | GNUNET_assert (0 == pthread_mutex_unlock (&jobs_lock)); |
1314 | if (NULL != job) | 1336 | GNUNET_GNSRECORD_block_sign (&job->zone, job->label, job->block); |
1315 | { | 1337 | if (job->block != job->block_priv) |
1316 | GNUNET_GNSRECORD_block_sign (&job->zone, job->label, job->block); | 1338 | GNUNET_GNSRECORD_block_sign (&job->zone, job->label, job->block_priv); |
1317 | if (job->block != job->block_priv) | 1339 | GNUNET_assert (0 == pthread_mutex_lock (&results_lock)); |
1318 | GNUNET_GNSRECORD_block_sign (&job->zone, job->label, job->block_priv); | 1340 | GNUNET_CONTAINER_DLL_insert (results_head, results_tail, job); |
1319 | GNUNET_assert (0 == pthread_mutex_lock (&results_lock)); | 1341 | GNUNET_assert (0 == pthread_mutex_unlock (&results_lock)); |
1320 | GNUNET_CONTAINER_DLL_insert (results_head, results_tail, job); | 1342 | job = NULL; |
1321 | GNUNET_assert (0 == pthread_mutex_unlock (&results_lock)); | 1343 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1322 | job = NULL; | 1344 | "Done, notifying main thread through pipe!\n"); |
1323 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1345 | GNUNET_DISK_file_write (fh, "!", 1); |
1324 | "Done, notifying main thread through pipe!\n"); | ||
1325 | GNUNET_DISK_file_write (fh, "!", 1); | ||
1326 | } | ||
1327 | } | 1346 | } |
1328 | return NULL; | 1347 | return NULL; |
1329 | } | 1348 | } |