[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r15307 - gnunet/src/fs
From: |
gnunet |
Subject: |
[GNUnet-SVN] r15307 - gnunet/src/fs |
Date: |
Wed, 25 May 2011 17:34:24 +0200 |
Author: grothoff
Date: 2011-05-25 17:34:24 +0200 (Wed, 25 May 2011)
New Revision: 15307
Modified:
gnunet/src/fs/gnunet-service-fs_cp.c
gnunet/src/fs/gnunet-service-fs_pr.c
Log:
better assertions, extra warnings
Modified: gnunet/src/fs/gnunet-service-fs_cp.c
===================================================================
--- gnunet/src/fs/gnunet-service-fs_cp.c 2011-05-25 15:19:07 UTC (rev
15306)
+++ gnunet/src/fs/gnunet-service-fs_cp.c 2011-05-25 15:34:24 UTC (rev
15307)
@@ -419,7 +419,9 @@
struct GSF_PeerTransmitHandle *pth = cls;
struct GSF_ConnectedPeer *cp;
size_t ret;
-
+
+ GNUNET_assert ( (NULL == buf) ||
+ (pth->size <= size) );
pth->cth = NULL;
if (pth->timeout_task != GNUNET_SCHEDULER_NO_TASK)
{
@@ -764,7 +766,7 @@
struct PutMessage *pm;
size_t msize;
- GNUNET_assert (data_len < GNUNET_SERVER_MAX_MESSAGE_SIZE);
+ GNUNET_assert (data_len + sizeof (struct PutMessage) <
GNUNET_SERVER_MAX_MESSAGE_SIZE);
GNUNET_assert (peerreq->pr == pr);
prd = GSF_pending_request_get_data_ (pr);
if (NULL == data)
Modified: gnunet/src/fs/gnunet-service-fs_pr.c
===================================================================
--- gnunet/src/fs/gnunet-service-fs_pr.c 2011-05-25 15:19:07 UTC (rev
15306)
+++ gnunet/src/fs/gnunet-service-fs_pr.c 2011-05-25 15:34:24 UTC (rev
15307)
@@ -100,6 +100,16 @@
GNUNET_PEER_Id sender_pid;
/**
+ * Time we started the last datastore lookup.
+ */
+ struct GNUNET_TIME_Absolute qe_start;
+
+ /**
+ * Task that warns us if the local datastore lookup takes too long.
+ */
+ GNUNET_SCHEDULER_TaskIdentifier warn_task;
+
+ /**
* Current offset for querying our local datastore for results.
* Starts at a random value, incremented until we get the same
* UID again (detected using 'first_uid'), which is then used
@@ -576,6 +586,8 @@
GNUNET_DATASTORE_cancel (pr->qe);
if (NULL != pr->gh)
GNUNET_DHT_get_stop (pr->gh);
+ if (GNUNET_SCHEDULER_NO_TASK != pr->warn_task)
+ GNUNET_SCHEDULER_cancel (pr->warn_task);
GNUNET_free (pr);
return GNUNET_YES;
}
@@ -589,7 +601,8 @@
void
GSF_pending_request_cancel_ (struct GSF_PendingRequest *pr)
{
- if (NULL == pr_map) return; /* already cleaned up! */
+ if (NULL == pr_map)
+ return; /* already cleaned up! */
GNUNET_assert (GNUNET_OK ==
GNUNET_CONTAINER_multihashmap_remove (pr_map,
&pr->public_data.query,
@@ -1019,7 +1032,50 @@
pr);
}
+
/**
+ * Task that issues a warning if the datastore lookup takes too long.
+ *
+ * @param cls the 'struct GSF_PendingRequest'
+ * @param tc task context
+ */
+static void
+warn_delay_task (void *cls,
+ const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ struct GSF_PendingRequest *pr = cls;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ _("Datastore lookup already took %llu ms!\n"),
+ (unsigned long long) GNUNET_TIME_absolute_get_duration
(pr->qe_start).rel_value);
+ pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
+ &warn_delay_task,
+ pr);
+}
+
+
+/**
+ * Task that issues a warning if the datastore lookup takes too long.
+ *
+ * @param cls the 'struct GSF_PendingRequest'
+ * @param tc task context
+ */
+static void
+odc_warn_delay_task (void *cls,
+ const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ struct GSF_PendingRequest *pr = cls;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ _("On-demand lookup already took %llu ms!\n"),
+ (unsigned long long) GNUNET_TIME_absolute_get_duration
(pr->qe_start).rel_value);
+ pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
+ &odc_warn_delay_task,
+ pr);
+}
+
+
+/**
* We're processing (local) results for a search request
* from another peer. Pass applicable results to the
* peer and if we are done either clean up (operation
@@ -1054,6 +1110,8 @@
unsigned int old_rf;
pr->qe = NULL;
+ GNUNET_SCHEDULER_cancel (pr->warn_task);
+ pr->warn_task = GNUNET_SCHEDULER_NO_TASK;
if (0 == pr->replies_seen_count)
{
pr->first_uid = uid;
@@ -1095,13 +1153,21 @@
gettext_noop ("# on-demand blocks matched
requests"),
1,
GNUNET_NO);
+ pr->qe_start = GNUNET_TIME_absolute_get ();
+ pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
+ &odc_warn_delay_task,
+ pr);
if (GNUNET_OK !=
GNUNET_FS_handle_on_demand_block (key, size, data, type, priority,
anonymity, expiration, uid,
&process_local_reply,
pr))
{
- pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh,
+ GNUNET_SCHEDULER_cancel (pr->warn_task);
+ pr->warn_task = GNUNET_SCHEDULER_add_delayed
(GNUNET_TIME_UNIT_MINUTES,
+ &warn_delay_task,
+ pr);
+ pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh,
pr->local_result_offset - 1,
&pr->public_data.query,
pr->public_data.type ==
GNUNET_BLOCK_TYPE_FS_DBLOCK
@@ -1139,6 +1205,10 @@
-1, -1,
GNUNET_TIME_UNIT_FOREVER_REL,
NULL, NULL);
+ pr->qe_start = GNUNET_TIME_absolute_get ();
+ pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
+ &warn_delay_task,
+ pr);
pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh,
pr->local_result_offset - 1,
&pr->public_data.query,
@@ -1198,6 +1268,10 @@
}
return;
}
+ pr->qe_start = GNUNET_TIME_absolute_get ();
+ pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
+ &warn_delay_task,
+ pr);
pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh,
pr->local_result_offset++,
&pr->public_data.query,
@@ -1233,6 +1307,10 @@
GNUNET_assert (NULL == pr->llc_cont);
pr->llc_cont = cont;
pr->llc_cont_cls = cont_cls;
+ pr->qe_start = GNUNET_TIME_absolute_get ();
+ pr->warn_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES,
+ &warn_delay_task,
+ pr);
pr->qe = GNUNET_DATASTORE_get_key (GSF_dsh,
pr->local_result_offset++,
&pr->public_data.query,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r15307 - gnunet/src/fs,
gnunet <=