diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-05-25 15:34:24 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-05-25 15:34:24 +0000 |
commit | b7981b63fe6630ca580768e555415d8c61c3e5c3 (patch) | |
tree | f7e2d09d65219d454fd518bf999c89d7d5a4ce93 /src/fs | |
parent | fc25b8f4e03c545a12631c50a5aa41d435c00cd5 (diff) | |
download | gnunet-b7981b63fe6630ca580768e555415d8c61c3e5c3.tar.gz gnunet-b7981b63fe6630ca580768e555415d8c61c3e5c3.zip |
better assertions, extra warnings
Diffstat (limited to 'src/fs')
-rw-r--r-- | src/fs/gnunet-service-fs_cp.c | 6 | ||||
-rw-r--r-- | src/fs/gnunet-service-fs_pr.c | 82 |
2 files changed, 84 insertions, 4 deletions
diff --git a/src/fs/gnunet-service-fs_cp.c b/src/fs/gnunet-service-fs_cp.c index acad54501..7508ea324 100644 --- a/src/fs/gnunet-service-fs_cp.c +++ b/src/fs/gnunet-service-fs_cp.c | |||
@@ -419,7 +419,9 @@ peer_transmit_ready_cb (void *cls, | |||
419 | struct GSF_PeerTransmitHandle *pth = cls; | 419 | struct GSF_PeerTransmitHandle *pth = cls; |
420 | struct GSF_ConnectedPeer *cp; | 420 | struct GSF_ConnectedPeer *cp; |
421 | size_t ret; | 421 | size_t ret; |
422 | 422 | ||
423 | GNUNET_assert ( (NULL == buf) || | ||
424 | (pth->size <= size) ); | ||
423 | pth->cth = NULL; | 425 | pth->cth = NULL; |
424 | if (pth->timeout_task != GNUNET_SCHEDULER_NO_TASK) | 426 | if (pth->timeout_task != GNUNET_SCHEDULER_NO_TASK) |
425 | { | 427 | { |
@@ -764,7 +766,7 @@ handle_p2p_reply (void *cls, | |||
764 | struct PutMessage *pm; | 766 | struct PutMessage *pm; |
765 | size_t msize; | 767 | size_t msize; |
766 | 768 | ||
767 | GNUNET_assert (data_len < GNUNET_SERVER_MAX_MESSAGE_SIZE); | 769 | GNUNET_assert (data_len + sizeof (struct PutMessage) < GNUNET_SERVER_MAX_MESSAGE_SIZE); |
768 | GNUNET_assert (peerreq->pr == pr); | 770 | GNUNET_assert (peerreq->pr == pr); |
769 | prd = GSF_pending_request_get_data_ (pr); | 771 | prd = GSF_pending_request_get_data_ (pr); |
770 | if (NULL == data) | 772 | if (NULL == data) |
diff --git a/src/fs/gnunet-service-fs_pr.c b/src/fs/gnunet-service-fs_pr.c index 220a331d5..7c1138356 100644 --- a/src/fs/gnunet-service-fs_pr.c +++ b/src/fs/gnunet-service-fs_pr.c | |||
@@ -100,6 +100,16 @@ struct GSF_PendingRequest | |||
100 | GNUNET_PEER_Id sender_pid; | 100 | GNUNET_PEER_Id sender_pid; |
101 | 101 | ||
102 | /** | 102 | /** |
103 | * Time we started the last datastore lookup. | ||
104 | */ | ||
105 | struct GNUNET_TIME_Absolute qe_start; | ||
106 | |||
107 | /** | ||
108 | * Task that warns us if the local datastore lookup takes too long. | ||
109 | */ | ||
110 | GNUNET_SCHEDULER_TaskIdentifier warn_task; | ||
111 | |||
112 | /** | ||
103 | * Current offset for querying our local datastore for results. | 113 | * Current offset for querying our local datastore for results. |
104 | * Starts at a random value, incremented until we get the same | 114 | * Starts at a random value, incremented until we get the same |
105 | * UID again (detected using 'first_uid'), which is then used | 115 | * UID again (detected using 'first_uid'), which is then used |
@@ -576,6 +586,8 @@ clean_request (void *cls, | |||
576 | GNUNET_DATASTORE_cancel (pr->qe); | 586 | GNUNET_DATASTORE_cancel (pr->qe); |
577 | if (NULL != pr->gh) | 587 | if (NULL != pr->gh) |
578 | GNUNET_DHT_get_stop (pr->gh); | 588 | GNUNET_DHT_get_stop (pr->gh); |
589 | if (GNUNET_SCHEDULER_NO_TASK != pr->warn_task) | ||
590 | GNUNET_SCHEDULER_cancel (pr->warn_task); | ||
579 | GNUNET_free (pr); | 591 | GNUNET_free (pr); |
580 | return GNUNET_YES; | 592 | return GNUNET_YES; |
581 | } | 593 | } |
@@ -589,7 +601,8 @@ clean_request (void *cls, | |||
589 | void | 601 | void |
590 | GSF_pending_request_cancel_ (struct GSF_PendingRequest *pr) | 602 | GSF_pending_request_cancel_ (struct GSF_PendingRequest *pr) |
591 | { | 603 | { |
592 | if (NULL == pr_map) return; /* already cleaned up! */ | 604 | if (NULL == pr_map) |
605 | return; /* already cleaned up! */ | ||
593 | GNUNET_assert (GNUNET_OK == | 606 | GNUNET_assert (GNUNET_OK == |
594 | GNUNET_CONTAINER_multihashmap_remove (pr_map, | 607 | GNUNET_CONTAINER_multihashmap_remove (pr_map, |
595 | &pr->public_data.query, | 608 | &pr->public_data.query, |
@@ -1019,6 +1032,49 @@ GSF_dht_lookup_ (struct GSF_PendingRequest *pr) | |||
1019 | pr); | 1032 | pr); |
1020 | } | 1033 | } |
1021 | 1034 | ||
1035 | |||
1036 | /** | ||
1037 | * Task that issues a warning if the datastore lookup takes too long. | ||
1038 | * | ||
1039 | * @param cls the 'struct GSF_PendingRequest' | ||
1040 | * @param tc task context | ||
1041 | */ | ||
1042 | static void | ||
1043 | warn_delay_task (void *cls, | ||
1044 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
1045 | { | ||
1046 | struct GSF_PendingRequest *pr = cls; | ||
1047 | |||
1048 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
1049 | _("Datastore lookup already took %llu ms!\n"), | ||
1050 | (unsigned long long) GNUNET_TIME_absolute_get_duration (pr->qe_start).rel_value); | ||
1051 | pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, | ||
1052 | &warn_delay_task, | ||
1053 | pr); | ||
1054 | } | ||
1055 | |||
1056 | |||
1057 | /** | ||
1058 | * Task that issues a warning if the datastore lookup takes too long. | ||
1059 | * | ||
1060 | * @param cls the 'struct GSF_PendingRequest' | ||
1061 | * @param tc task context | ||
1062 | */ | ||
1063 | static void | ||
1064 | odc_warn_delay_task (void *cls, | ||
1065 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
1066 | { | ||
1067 | struct GSF_PendingRequest *pr = cls; | ||
1068 | |||
1069 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
1070 | _("On-demand lookup already took %llu ms!\n"), | ||
1071 | (unsigned long long) GNUNET_TIME_absolute_get_duration (pr->qe_start).rel_value); | ||
1072 | pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, | ||
1073 | &odc_warn_delay_task, | ||
1074 | pr); | ||
1075 | } | ||
1076 | |||
1077 | |||
1022 | /** | 1078 | /** |
1023 | * We're processing (local) results for a search request | 1079 | * We're processing (local) results for a search request |
1024 | * from another peer. Pass applicable results to the | 1080 | * from another peer. Pass applicable results to the |
@@ -1054,6 +1110,8 @@ process_local_reply (void *cls, | |||
1054 | unsigned int old_rf; | 1110 | unsigned int old_rf; |
1055 | 1111 | ||
1056 | pr->qe = NULL; | 1112 | pr->qe = NULL; |
1113 | GNUNET_SCHEDULER_cancel (pr->warn_task); | ||
1114 | pr->warn_task = GNUNET_SCHEDULER_NO_TASK; | ||
1057 | if (0 == pr->replies_seen_count) | 1115 | if (0 == pr->replies_seen_count) |
1058 | { | 1116 | { |
1059 | pr->first_uid = uid; | 1117 | pr->first_uid = uid; |
@@ -1095,13 +1153,21 @@ process_local_reply (void *cls, | |||
1095 | gettext_noop ("# on-demand blocks matched requests"), | 1153 | gettext_noop ("# on-demand blocks matched requests"), |
1096 | 1, | 1154 | 1, |
1097 | GNUNET_NO); | 1155 | GNUNET_NO); |
1156 | pr->qe_start = GNUNET_TIME_absolute_get (); | ||
1157 | pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, | ||
1158 | &odc_warn_delay_task, | ||
1159 | pr); | ||
1098 | if (GNUNET_OK != | 1160 | if (GNUNET_OK != |
1099 | GNUNET_FS_handle_on_demand_block (key, size, data, type, priority, | 1161 | GNUNET_FS_handle_on_demand_block (key, size, data, type, priority, |
1100 | anonymity, expiration, uid, | 1162 | anonymity, expiration, uid, |
1101 | &process_local_reply, | 1163 | &process_local_reply, |
1102 | pr)) | 1164 | pr)) |
1103 | { | 1165 | { |
1104 | pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh, | 1166 | GNUNET_SCHEDULER_cancel (pr->warn_task); |
1167 | pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, | ||
1168 | &warn_delay_task, | ||
1169 | pr); | ||
1170 | pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh, | ||
1105 | pr->local_result_offset - 1, | 1171 | pr->local_result_offset - 1, |
1106 | &pr->public_data.query, | 1172 | &pr->public_data.query, |
1107 | pr->public_data.type == GNUNET_BLOCK_TYPE_FS_DBLOCK | 1173 | pr->public_data.type == GNUNET_BLOCK_TYPE_FS_DBLOCK |
@@ -1139,6 +1205,10 @@ process_local_reply (void *cls, | |||
1139 | -1, -1, | 1205 | -1, -1, |
1140 | GNUNET_TIME_UNIT_FOREVER_REL, | 1206 | GNUNET_TIME_UNIT_FOREVER_REL, |
1141 | NULL, NULL); | 1207 | NULL, NULL); |
1208 | pr->qe_start = GNUNET_TIME_absolute_get (); | ||
1209 | pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, | ||
1210 | &warn_delay_task, | ||
1211 | pr); | ||
1142 | pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh, | 1212 | pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh, |
1143 | pr->local_result_offset - 1, | 1213 | pr->local_result_offset - 1, |
1144 | &pr->public_data.query, | 1214 | &pr->public_data.query, |
@@ -1198,6 +1268,10 @@ process_local_reply (void *cls, | |||
1198 | } | 1268 | } |
1199 | return; | 1269 | return; |
1200 | } | 1270 | } |
1271 | pr->qe_start = GNUNET_TIME_absolute_get (); | ||
1272 | pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, | ||
1273 | &warn_delay_task, | ||
1274 | pr); | ||
1201 | pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh, | 1275 | pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh, |
1202 | pr->local_result_offset++, | 1276 | pr->local_result_offset++, |
1203 | &pr->public_data.query, | 1277 | &pr->public_data.query, |
@@ -1233,6 +1307,10 @@ GSF_local_lookup_ (struct GSF_PendingRequest *pr, | |||
1233 | GNUNET_assert (NULL == pr->llc_cont); | 1307 | GNUNET_assert (NULL == pr->llc_cont); |
1234 | pr->llc_cont = cont; | 1308 | pr->llc_cont = cont; |
1235 | pr->llc_cont_cls = cont_cls; | 1309 | pr->llc_cont_cls = cont_cls; |
1310 | pr->qe_start = GNUNET_TIME_absolute_get (); | ||
1311 | pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, | ||
1312 | &warn_delay_task, | ||
1313 | pr); | ||
1236 | pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh, | 1314 | pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh, |
1237 | pr->local_result_offset++, | 1315 | pr->local_result_offset++, |
1238 | &pr->public_data.query, | 1316 | &pr->public_data.query, |