summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Hruby <michal.mhr@gmail.com>2010-07-28 17:54:18 +0200
committerMichal Hruby <michal.mhr@gmail.com>2010-07-28 17:54:18 +0200
commit17a7299652b1187e8cb2c532c142178ae1a6a63d (patch)
tree94d9429db36a6e9c9fb7a36f63285eb525dbfc85
parenta6d2cc484e74ff4b401ce4dc9a12108b29b36102 (diff)
Don't send more than 100 events in 1 dbus call
-rw-r--r--zeitgeist-datahub.vala32
1 files changed, 21 insertions, 11 deletions
diff --git a/zeitgeist-datahub.vala b/zeitgeist-datahub.vala
index d59fd68..033f154 100644
--- a/zeitgeist-datahub.vala
+++ b/zeitgeist-datahub.vala
@@ -141,29 +141,39 @@ public class DataHub : Object, DataHubService
{
debug ("Inserting %u events", queued_events.length ());
- PtrArray ptr_arr = new PtrArray.with_free_func (Object.unref);
- // careful here, the ptr array does ref_sink on the events
- // inside Log.insert_events
- foreach (unowned Event e in queued_events)
+ batch_insert_events ();
+
+ queued_events = new List<Event> ();
+ }
+
+ protected async void batch_insert_events ()
+ {
+ // copy the events to GenericArray (with a ref on them)
+ GenericArray<Event> all_events = new GenericArray<Event> ();
+ foreach (var e in queued_events)
{
- ptr_arr.add (e);
+ all_events.add (e);
}
- zg_log.insert_events_from_ptrarray ((owned) ptr_arr, null,
- (src, res) =>
+ while (all_events.length > 0)
{
- unowned Zeitgeist.Log l = src as Zeitgeist.Log;
+ uint elements_pushed = uint.min ((uint) all_events.length, 100);
+ PtrArray ptr_arr = new PtrArray.with_free_func (Object.unref);
+ // careful here, the ptr array does ref_sink on the events
+ // inside Log.insert_events
+ for (uint i=0; i<elements_pushed; i++) ptr_arr.add (all_events[i]);
+
try
{
- l.insert_events_from_ptrarray.end (res);
+ yield zg_log.insert_events_from_ptrarray ((owned) ptr_arr, null);
}
catch (GLib.Error err)
{
warning ("Error during inserting events: %s", err.message);
}
- });
- queued_events = new List<Event> ();
+ all_events.remove_range (0, elements_pushed);
+ }
}
protected void run ()