diff options
author | Michal Hruby <michal.mhr@gmail.com> | 2010-07-28 17:54:18 +0200 |
---|---|---|
committer | Michal Hruby <michal.mhr@gmail.com> | 2010-07-28 17:54:18 +0200 |
commit | 17a7299652b1187e8cb2c532c142178ae1a6a63d (patch) | |
tree | 94d9429db36a6e9c9fb7a36f63285eb525dbfc85 | |
parent | a6d2cc484e74ff4b401ce4dc9a12108b29b36102 (diff) |
Don't send more than 100 events in 1 dbus call
-rw-r--r-- | zeitgeist-datahub.vala | 32 |
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 () |