aboutsummaryrefslogtreecommitdiff
path: root/src/zonemaster/gnunet-service-zonemaster.c
diff options
context:
space:
mode:
authorMartin Schanzenbach <schanzen@gnunet.org>2022-10-21 10:37:24 +0900
committerMartin Schanzenbach <schanzen@gnunet.org>2022-10-21 10:37:24 +0900
commit23d5c0716781f2f6720e3c549cc662e70ad78b17 (patch)
tree0385bbe77439ac54fad768e2568ca26ac0ab03fe /src/zonemaster/gnunet-service-zonemaster.c
parent34c3a6c5ae3a7ce2b4ec8b2f13ee934cb7816f5a (diff)
downloadgnunet-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.c165
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;
387static struct CacheOperation *cop_tail; 387static struct CacheOperation *cop_tail;
388 388
389 389
390static void
391free_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
774static void
775free_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}