|
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);
+
}
|