From: <svn...@op...> - 2005-03-21 16:31:37
|
Author: azrael Date: 2005-03-21 17:32:18 +0100 (Mon, 21 Mar 2005) New Revision: 382 Modified: trunk/opensync/opensync_format_internals.h trunk/opensync/opensync_plugin.c trunk/opensync/opensync_plugin.h trunk/osengine/osengine_client.c trunk/osengine/osengine_client_internals.h trunk/osengine/osengine_deciders.c trunk/osengine/osengine_engine.c trunk/osengine/osengine_engine_internals.h trunk/osengine/osengine_mapping.c trunk/plugins/file-sync/src/file_sync.c Log: First implementation of the committed_all signal Modified: trunk/opensync/opensync_format_internals.h =================================================================== --- trunk/opensync/opensync_format_internals.h 2005-03-21 00:07:30 UTC (rev 381) +++ trunk/opensync/opensync_format_internals.h 2005-03-21 16:32:18 UTC (rev 382) @@ -110,6 +110,8 @@ osync_bool (* commit_change) (OSyncContext *, OSyncChange *); osync_bool (* access) (OSyncContext *, OSyncChange *); void (* read) (OSyncContext *, OSyncChange *); + void (* committed_all) (void *); + void (* batch_commit) (void *, OSyncContext **, OSyncChange **); OSyncFormatCompareFunc cmp_func; OSyncFormatMergeFunc merge_func; OSyncFormatDuplicateFunc duplicate_func; Modified: trunk/opensync/opensync_plugin.c =================================================================== --- trunk/opensync/opensync_plugin.c 2005-03-21 00:07:30 UTC (rev 381) +++ trunk/opensync/opensync_plugin.c 2005-03-21 16:32:18 UTC (rev 382) @@ -293,6 +293,8 @@ sink->functions.commit_change = template->commit_change; sink->functions.access = template->access; sink->functions.read = template->read; + sink->functions.committed_all = template->committed_all; + sink->functions.batch_commit = template->batch_commit; sink->extension_name = g_strdup(template->extension_name); return sink; } @@ -346,6 +348,24 @@ format_template->read = read; } +void osync_plugin_set_batch_commit_objformat(OSyncPluginInfo *info, const char *objtypestr, const char *formatstr, void (* batch) (void *, OSyncContext **, OSyncChange **)) +{ + OSyncObjTypeTemplate *template = osync_plugin_find_objtype_template(info->plugin, objtypestr); + osync_assert(template, "Unable to accept objformat. Did you forget to add the objtype?"); + OSyncObjFormatTemplate *format_template = osync_plugin_find_objformat_template(template, formatstr); + osync_assert(format_template, "Unable to set batch commit function. Did you forget to add the objformat?"); + format_template->batch_commit = batch; +} + +void osync_plugin_set_committed_all_objformat(OSyncPluginInfo *info, const char *objtypestr, const char *formatstr, void (* committed_all) (void *)) +{ + OSyncObjTypeTemplate *template = osync_plugin_find_objtype_template(info->plugin, objtypestr); + osync_assert(template, "Unable to accept objformat. Did you forget to add the objtype?"); + OSyncObjFormatTemplate *format_template = osync_plugin_find_objformat_template(template, formatstr); + osync_assert(format_template, "Unable to set committed_all function. Did you forget to add the objformat?"); + format_template->committed_all = committed_all; +} + OSyncObjFormatSink *osync_objtype_find_format_sink(OSyncObjTypeSink *sink, const char *formatstr) { GList *f; Modified: trunk/opensync/opensync_plugin.h =================================================================== --- trunk/opensync/opensync_plugin.h 2005-03-21 00:07:30 UTC (rev 381) +++ trunk/opensync/opensync_plugin.h 2005-03-21 16:32:18 UTC (rev 382) @@ -71,5 +71,7 @@ void osync_plugin_set_commit_objformat(OSyncPluginInfo *info, const char *objtypestr, const char *formatstr, osync_bool (* commit_change) (OSyncContext *, OSyncChange *)); void osync_plugin_set_access_objformat(OSyncPluginInfo *info, const char *objtypestr, const char *formatstr, osync_bool (* access_fn) (OSyncContext *, OSyncChange *)); void osync_plugin_set_read_objformat(OSyncPluginInfo *info, const char *objtypestr, const char *formatstr, void (* read) (OSyncContext *, OSyncChange *)); +void osync_plugin_set_batch_commit_objformat(OSyncPluginInfo *info, const char *objtypestr, const char *formatstr, void (* batch) (void *, OSyncContext **, OSyncChange **)); +void osync_plugin_set_committed_all_objformat(OSyncPluginInfo *info, const char *objtypestr, const char *formatstr, void (* committed_all) (void *)); /*@}*/ Modified: trunk/osengine/osengine_client.c =================================================================== --- trunk/osengine/osengine_client.c 2005-03-21 00:07:30 UTC (rev 381) +++ trunk/osengine/osengine_client.c 2005-03-21 16:32:18 UTC (rev 382) @@ -42,9 +42,6 @@ client->fl_done = osync_flag_new(NULL); client->fl_finished = osync_flag_new(engine->cmb_finished); - client->cmb_written = osync_comb_flag_new(FALSE, FALSE); - osync_flag_set_pos_trigger(client->cmb_written, (MSyncFlagTriggerFunc)send_committed_all, client, engine); - return client; } @@ -62,7 +59,6 @@ osync_flag_free(client->fl_sent_changes); osync_flag_free(client->fl_done); osync_flag_free(client->fl_finished); - osync_flag_free(client->cmb_written); g_free(client); osync_trace(TRACE_EXIT, "osync_client_free"); @@ -173,7 +169,7 @@ return; } - if (itm_message_is_methodcall(message, "COMMITTED_ALL")) { + if (itm_message_is_signal(message, "COMMITTED_ALL")) { osync_member_committed_all(client->member); osync_trace(TRACE_EXIT, "client_message_handler"); return; Modified: trunk/osengine/osengine_client_internals.h =================================================================== --- trunk/osengine/osengine_client_internals.h 2005-03-21 00:07:30 UTC (rev 381) +++ trunk/osengine/osengine_client_internals.h 2005-03-21 16:32:18 UTC (rev 382) @@ -14,7 +14,6 @@ MSyncFlag *fl_sent_changes; MSyncFlag *fl_done; MSyncFlag *fl_finished; - MSyncFlag *cmb_written; GThread *thread; GMainContext *context; Modified: trunk/osengine/osengine_deciders.c =================================================================== --- trunk/osengine/osengine_deciders.c 2005-03-21 00:07:30 UTC (rev 381) +++ trunk/osengine/osengine_deciders.c 2005-03-21 16:32:18 UTC (rev 382) @@ -166,13 +166,16 @@ void osengine_client_decider(OSyncEngine *engine, OSyncClient *client) { osync_trace(TRACE_ENTRY, "osengine_client_decider(%p, %p)", engine, client); - osync_trace(TRACE_INTERNAL, "ENG(SENT%i,READ%i,MAP%i),CON%i,SENT%i,DONE%i,FIN%i", \ + osync_trace(TRACE_INTERNAL, "ENG(RUN%i,STOP%i,SENT%i,READ%i,MAP%i,SYNC%i),CON%i,SENT%i,DONE%i,FIN%i", \ + osync_flag_is_set(engine->fl_running), \ + osync_flag_is_not_set(engine->fl_stop), \ osync_flag_is_set(engine->cmb_sent_changes), \ osync_flag_is_set(engine->cmb_read_all), \ osync_flag_is_set(engine->cmb_entries_mapped), \ + osync_flag_is_set(engine->cmb_synced), \ osync_flag_is_set(client->fl_connected), \ osync_flag_is_set(client->fl_sent_changes), \ - osync_flag_is_set(client->fl_done), \ + osync_flag_is_not_set(client->fl_done), \ osync_flag_is_set(client->fl_finished)); if (osync_flag_is_set(engine->fl_running) \ Modified: trunk/osengine/osengine_engine.c =================================================================== --- trunk/osengine/osengine_engine.c 2005-03-21 00:07:30 UTC (rev 381) +++ trunk/osengine/osengine_engine.c 2005-03-21 16:32:18 UTC (rev 382) @@ -349,7 +349,6 @@ void send_committed_all(OSyncClient *target, OSyncEngine *sender) { - osync_flag_changing(target->fl_done); ITMessage *message = itm_message_new_signal(sender, "COMMITTED_ALL"); itm_queue_send(target->incoming, message); } @@ -515,6 +514,19 @@ osync_trace(TRACE_EXIT, "%s", __func__); } +static void trigger_engine_multiplied(OSyncEngine *engine) +{ + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, engine); + + GList *c = NULL; + for (c = engine->clients; c; c = c->next) { + OSyncClient *client = c->data; + send_committed_all(client, engine); + } + + osync_trace(TRACE_EXIT, "%s", __func__); +} + static gboolean startupfunc(gpointer data) { OSyncEngine *engine = data; @@ -566,6 +578,7 @@ osync_flag_set_state(engine->cmb_finished, FALSE); osync_flag_set_state(engine->cmb_connected, FALSE); osync_flag_set_state(engine->cmb_read_all, TRUE); + osync_flag_set_state(engine->cmb_multiplied, FALSE); itm_queue_flush(engine->incoming); osync_status_update_engine(engine, ENG_ENDPHASE_DISCON, NULL); @@ -653,6 +666,9 @@ engine->cmb_chkconflict = osync_comb_flag_new(FALSE, TRUE); osync_flag_set_pos_trigger(engine->cmb_chkconflict, (MSyncFlagTriggerFunc)trigger_status_end_conflicts, engine, NULL); + engine->cmb_multiplied = osync_comb_flag_new(FALSE, FALSE); + osync_flag_set_pos_trigger(engine->cmb_multiplied, (MSyncFlagTriggerFunc)trigger_engine_multiplied, engine, NULL); + osync_flag_set(engine->fl_sync); int i; @@ -697,6 +713,7 @@ osync_flag_free(engine->cmb_finished); osync_flag_free(engine->cmb_connected); osync_flag_free(engine->cmb_read_all); + osync_flag_free(engine->cmb_multiplied); itm_queue_flush(engine->incoming); itm_queue_free(engine->incoming); Modified: trunk/osengine/osengine_engine_internals.h =================================================================== --- trunk/osengine/osengine_engine_internals.h 2005-03-21 00:07:30 UTC (rev 381) +++ trunk/osengine/osengine_engine_internals.h 2005-03-21 16:32:18 UTC (rev 382) @@ -48,6 +48,7 @@ MSyncFlag *cmb_finished; //Are all clients done and disconnected? MSyncFlag *cmb_chkconflict; MSyncFlag *cmb_read_all; + MSyncFlag *cmb_multiplied; osync_bool man_dispatch; osync_bool allow_sync_alert; Modified: trunk/osengine/osengine_mapping.c =================================================================== --- trunk/osengine/osengine_mapping.c 2005-03-21 00:07:30 UTC (rev 381) +++ trunk/osengine/osengine_mapping.c 2005-03-21 16:32:18 UTC (rev 382) @@ -281,7 +281,7 @@ osync_flag_attach(mapping->cmb_synced, table->engine->cmb_synced); osync_flag_attach(mapping->fl_chkconflict, table->engine->cmb_chkconflict); - + osync_flag_attach(mapping->fl_multiplied, table->engine->cmb_multiplied); } osync_trace(TRACE_INTERNAL, "osengine_mapping_new(%p): %p", table, mapping); return mapping; Modified: trunk/plugins/file-sync/src/file_sync.c =================================================================== --- trunk/plugins/file-sync/src/file_sync.c 2005-03-21 00:07:30 UTC (rev 381) +++ trunk/plugins/file-sync/src/file_sync.c 2005-03-21 16:32:18 UTC (rev 382) @@ -474,6 +474,20 @@ } return TRUE; } + +static void fs_batch_commit(void *data, OSyncContext **contexts, OSyncChange **changes) +{ + filesyncinfo *env = (filesyncinfo *)data; + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, env, contexts, changes); + osync_trace(TRACE_EXIT, "%s", __func__); +} + +static void fs_committed_all(void *data) +{ + filesyncinfo *env = (filesyncinfo *)data; + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, env); + osync_trace(TRACE_EXIT, "%s", __func__); +} #endif void get_info(OSyncPluginInfo *info) @@ -492,6 +506,12 @@ info->functions.get_changeinfo = fs_get_changeinfo; info->functions.get_data = fs_get_data; + osync_plugin_accept_objtype(info, "data"); + osync_plugin_accept_objformat(info, "data", "file", NULL); + osync_plugin_set_commit_objformat(info, "data", "file", fs_commit_change); + osync_plugin_set_access_objformat(info, "data", "file", fs_access); + osync_plugin_set_read_objformat(info, "data", "file", fs_read); + #ifdef ERROR_TEST //Lets reduce the timeouts a bit so the checks work faster info->timeouts.disconnect_timeout = 5; @@ -503,11 +523,13 @@ if (g_getenv("IS_AVAILABLE")) info->functions.is_available = fs_is_available; + + if (g_getenv("BATCH_COMMIT1")) + osync_plugin_set_batch_commit_objformat(info, "data", "file", fs_batch_commit); + + if (g_getenv("BATCH_COMMIT2")) + osync_plugin_set_committed_all_objformat(info, "data", "file", fs_committed_all); #endif - osync_plugin_accept_objtype(info, "data"); - osync_plugin_accept_objformat(info, "data", "file", NULL); - osync_plugin_set_commit_objformat(info, "data", "file", fs_commit_change); - osync_plugin_set_access_objformat(info, "data", "file", fs_access); - osync_plugin_set_read_objformat(info, "data", "file", fs_read); + } |