gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r31902 - gnunet/src/testbed


From: gnunet
Subject: [GNUnet-SVN] r31902 - gnunet/src/testbed
Date: Tue, 14 Jan 2014 14:32:22 +0100

Author: harsha
Date: 2014-01-14 14:32:21 +0100 (Tue, 14 Jan 2014)
New Revision: 31902

Modified:
   gnunet/src/testbed/gnunet-daemon-latency-logger.c
Log:
- only log changed values


Modified: gnunet/src/testbed/gnunet-daemon-latency-logger.c
===================================================================
--- gnunet/src/testbed/gnunet-daemon-latency-logger.c   2014-01-14 13:31:06 UTC 
(rev 31901)
+++ gnunet/src/testbed/gnunet-daemon-latency-logger.c   2014-01-14 13:32:21 UTC 
(rev 31902)
@@ -58,6 +58,29 @@
 
 
 /**
+ * Entry type to be used in the map to store old latency values
+ */
+struct Entry
+{
+  /**
+   *  The peer's identity
+   */
+  struct GNUNET_PeerIdentity id;
+
+  /**
+   * The last known value for latency
+   */
+  unsigned int latency;
+  
+};
+
+
+/**
+ * Handle to the map used to store old latency values for peers
+ */
+static struct GNUNET_CONTAINER_MultiPeerMap *map;
+
+/**
  * The SQLite database handle
  */
 static struct sqlite3 *db;
@@ -79,6 +102,31 @@
 
 
 /**
+ * @ingroup hashmap
+ * Iterator over hash map entries.
+ *
+ * @param cls closure
+ * @param key current public key
+ * @param value value in the hash map
+ * @return #GNUNET_YES if we should continue to
+ *         iterate,
+ *         #GNUNET_NO if not.
+ */
+static int
+free_iterator (void *cls,
+               const struct GNUNET_PeerIdentity *key,
+               void *value)
+{
+  struct Entry *e = cls;
+
+  GNUNET_assert (GNUNET_YES == 
+                 GNUNET_CONTAINER_multipeermap_remove (map, key, e));
+  GNUNET_free (e);
+  return GNUNET_YES;
+}
+
+
+/**
  * Shutdown
  *
  * @param cls NULL
@@ -98,6 +146,13 @@
   }
   GNUNET_break (SQLITE_OK == sqlite3_close (db));
   db = NULL;
+  if (NULL != map)
+  {
+    GNUNET_assert (GNUNET_SYSERR != 
+                   GNUNET_CONTAINER_multipeermap_iterate (map, free_iterator, 
NULL));
+    GNUNET_CONTAINER_multipeermap_destroy (map);
+    map = NULL;
+  }
 }
 
 /**
@@ -131,6 +186,7 @@
       " ?2,"
       " datetime('now')"
       ");";
+  struct Entry *entry;
   int latency;
   unsigned int cnt;
 
@@ -146,6 +202,15 @@
 
  insert:
   latency = (int) ntohl (ats[cnt].value);
+  entry = NULL;
+  if (GNUNET_YES == GNUNET_CONTAINER_multipeermap_contains (map,
+                                                            &address->peer))
+  {
+    entry = GNUNET_CONTAINER_multipeermap_get (map, &address->peer);
+    GNUNET_assert (NULL != entry);
+    if (latency == entry->latency)
+      return;
+  }
   if (NULL == stmt_insert)
   {
     if (SQLITE_OK != sqlite3_prepare_v2 (db, query_insert, -1, &stmt_insert,
@@ -173,6 +238,15 @@
     LOG_SQLITE (db, NULL, GNUNET_ERROR_TYPE_ERROR, "sqlite3_insert");
     goto err_shutdown;
   }
+  if (NULL == entry)
+  {
+    entry = GNUNET_new (struct Entry);
+    entry->id = address->peer;
+    GNUNET_CONTAINER_multipeermap_put (map, 
+                                       &entry->id, entry,
+                                       
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
+  }
+  entry->latency = latency;
   return;
   
  err_shutdown:
@@ -226,6 +300,7 @@
   GNUNET_free (dbfile);  
   dbfile = NULL;
   ats = GNUNET_ATS_performance_init (c, addr_info_cb, NULL);
+  map = GNUNET_CONTAINER_multipeermap_create (30, GNUNET_YES);
   shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
                                                 &do_shutdown, NULL);
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]