[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r28283 - gnunet/src/set
From: |
gnunet |
Subject: |
[GNUnet-SVN] r28283 - gnunet/src/set |
Date: |
Tue, 23 Jul 2013 22:29:40 +0200 |
Author: dold
Date: 2013-07-23 22:29:40 +0200 (Tue, 23 Jul 2013)
New Revision: 28283
Modified:
gnunet/src/set/gnunet-service-set_union.c
gnunet/src/set/ibf.c
Log:
- better debug logs, ibf tweak
Modified: gnunet/src/set/gnunet-service-set_union.c
===================================================================
--- gnunet/src/set/gnunet-service-set_union.c 2013-07-23 20:15:55 UTC (rev
28282)
+++ gnunet/src/set/gnunet-service-set_union.c 2013-07-23 20:29:40 UTC (rev
28283)
@@ -59,7 +59,13 @@
*/
#define MAX_IBF_ORDER (16)
+/**
+ * Number of buckets used in the ibf per estimated
+ * difference.
+ */
+#define IBF_ALPHA 1
+
/**
* Current phase we are in for a union operation.
*/
@@ -724,7 +730,7 @@
unsigned int ibf_order;
ibf_order = 2;
- while ((1<<ibf_order) < (2 * diff))
+ while ((1<<ibf_order) < (IBF_ALPHA * diff))
ibf_order++;
if (ibf_order > MAX_IBF_ORDER)
ibf_order = MAX_IBF_ORDER;
@@ -800,7 +806,8 @@
continue;
}
memcpy (&mh[1], element->data, element->size);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "sending element to peer\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "sending element (%s) to peer\n",
+ GNUNET_h2s (&ke->element->element_hash));
GNUNET_MQ_send (eo->mq, ev);
ke = ke->next_colliding;
}
@@ -836,6 +843,7 @@
decode_and_send (struct OperationState *eo)
{
struct IBF_Key key;
+ struct IBF_Key last_key;
int side;
unsigned int num_decoded;
struct InvertibleBloomFilter *diff_ibf;
@@ -851,15 +859,24 @@
num_decoded = 0;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "decoding IBF (size=%u)\n",
diff_ibf->size);
+
while (1)
{
int res;
+ if (num_decoded > 0)
+ last_key = key;
+
res = ibf_decode (diff_ibf, &side, &key);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "decoded ibf key %lx\n",
+ key.key_val);
num_decoded += 1;
- if (num_decoded > diff_ibf->size)
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "detected cyclic ibf\n");
- if ((GNUNET_SYSERR == res) || (num_decoded > diff_ibf->size))
+ if (num_decoded > diff_ibf->size || (num_decoded > 1 && last_key.key_val
== key.key_val))
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "detected cyclic ibf (decoded
%u/%u)\n",
+ num_decoded, diff_ibf->size);
+ if ((GNUNET_SYSERR == res) || (num_decoded > diff_ibf->size) ||
+ (num_decoded > 1 && last_key.key_val == key.key_val))
{
int next_order;
next_order = 0;
@@ -893,7 +910,7 @@
{
send_elements_for_key (eo, key);
}
- else
+ else if (-1 == side)
{
struct GNUNET_MQ_Envelope *ev;
struct GNUNET_MessageHeader *msg;
@@ -902,9 +919,15 @@
/* FIXME: merge multiple requests */
ev = GNUNET_MQ_msg_header_extra (msg, sizeof (struct IBF_Key),
GNUNET_MESSAGE_TYPE_SET_P2P_ELEMENT_REQUESTS);
+
*(struct IBF_Key *) &msg[1] = key;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "sending element request\n");
GNUNET_MQ_send (eo->mq, ev);
}
+ else
+ {
+ GNUNET_assert (0);
+ }
}
ibf_destroy (diff_ibf);
}
@@ -970,7 +993,6 @@
if (eo->ibf_buckets_received == eo->remote_ibf->size)
{
-
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "received full ibf\n");
eo->phase = PHASE_EXPECT_ELEMENTS;
decode_and_send (eo);
@@ -992,7 +1014,7 @@
struct GNUNET_MQ_Envelope *ev;
struct GNUNET_SET_ResultMessage *rm;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "sending el of size %u\n",
element->size);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "sending element (size %u) to
client\n", element->size);
GNUNET_assert (0 != eo->spec->client_request_id);
ev = GNUNET_MQ_msg_extra (rm, element->size, GNUNET_MESSAGE_TYPE_SET_RESULT);
if (NULL == ev)
@@ -1060,6 +1082,7 @@
ee->element.size = element_size;
ee->element.data = &ee[1];
ee->remote = GNUNET_YES;
+ GNUNET_CRYPTO_hash (ee->element.data, ee->element.size, &ee->element_hash);
insert_element (eo, ee);
send_client_element (eo, &ee->element);
Modified: gnunet/src/set/ibf.c
===================================================================
--- gnunet/src/set/ibf.c 2013-07-23 20:15:55 UTC (rev 28282)
+++ gnunet/src/set/ibf.c 2013-07-23 20:29:40 UTC (rev 28283)
@@ -97,8 +97,9 @@
{
uint32_t filled;
uint32_t i;
- uint32_t bucket = key.key_val & 0xFFFFFFFF;
+ uint32_t bucket;
+ bucket = GNUNET_CRYPTO_crc32_n (&key, sizeof key);
for (i = 0, filled=0; filled < ibf->hash_num; i++)
{
unsigned int j;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r28283 - gnunet/src/set,
gnunet <=