|
From: <svn...@op...> - 2005-03-21 00:06:49
|
Author: azrael
Date: 2005-03-21 01:07:30 +0100 (Mon, 21 Mar 2005)
New Revision: 381
Modified:
trunk/Makefile.am
trunk/opensync/opensync_format_internals.h
trunk/opensync/opensync_member.c
trunk/opensync/opensync_member.h
trunk/opensync/opensync_plugin.h
trunk/osengine/osengine_client.c
trunk/osengine/osengine_client_internals.h
trunk/osengine/osengine_engine.c
trunk/osengine/osengine_engine_internals.h
Log:
Added skeleton for the new batch commit plugin
functions.
Added a new signal to the members "committed_all" that
will be called by the engine when all changes to be written
have been sent to a member.
Modified: trunk/Makefile.am
===================================================================
--- trunk/Makefile.am 2005-03-18 16:16:20 UTC (rev 380)
+++ trunk/Makefile.am 2005-03-21 00:07:30 UTC (rev 381)
@@ -17,10 +17,11 @@
EXTRA_DIST = \
autogen.sh \
- buildtest.sh \
plugins \
opensync-1.0.pc.in \
- osengine-1.0.pc.in
+ osengine-1.0.pc.in \
+ misc/buildtest.sh \
+ misc/doxygen.css
dist-hook:
find $(distdir) -name .svn -print0 | xargs -0 rm -rf
Modified: trunk/opensync/opensync_format_internals.h
===================================================================
--- trunk/opensync/opensync_format_internals.h 2005-03-18 16:16:20 UTC (rev 380)
+++ trunk/opensync/opensync_format_internals.h 2005-03-21 00:07:30 UTC (rev 381)
@@ -83,6 +83,8 @@
OSyncFormatFunctions functions;
char *extension_name;
struct OSyncObjTypeSink *objtype_sink;
+ GList *commit_changes;
+ GList *commit_contexts;
} OSyncObjFormatSink;
typedef struct OSyncObjTypeSink {
Modified: trunk/opensync/opensync_member.c
===================================================================
--- trunk/opensync/opensync_member.c 2005-03-18 16:16:20 UTC (rev 380)
+++ trunk/opensync/opensync_member.c 2005-03-21 00:07:30 UTC (rev 381)
@@ -562,12 +562,12 @@
g_assert(member);
g_assert(change);
+ OSyncFormatEnv *env = osync_member_get_format_env(member);
OSyncContext *context = osync_context_new(member);
context->callback_function = function;
context->calldata = user_data;
-
- OSyncFormatEnv *env = osync_member_get_format_env(member);
+
OSyncObjType *type = change->objtype;
/* This is just an optmization:
@@ -617,10 +617,18 @@
osync_debug("OSYNC", 2, "Comparing change %s with sink %s", osync_change_get_objformat(change)->name, fmtsink->format ? fmtsink->format->name : "None");
if (fmtsink->format == osync_change_get_objformat(change)) {
- // Send the change
- fmtsink->functions.commit_change(context, change);
- osync_trace(TRACE_EXIT, "%s", __func__);
- return;
+ if (fmtsink->functions.batch_commit) {
+ //Append to the stored changes
+ fmtsink->commit_changes = g_list_append(fmtsink->commit_changes, change);
+ fmtsink->commit_contexts = g_list_append(fmtsink->commit_contexts, context);
+ osync_trace(TRACE_EXIT, "%s: Waiting for batch processing", __func__);
+ return;
+ } else {
+ // Send the change
+ fmtsink->functions.commit_change(context, change);
+ osync_trace(TRACE_EXIT, "%s", __func__);
+ return;
+ }
}
}
@@ -628,6 +636,56 @@
osync_trace(TRACE_EXIT_ERROR, "%s: Unable to find a sink", __func__);
}
+void osync_member_committed_all(OSyncMember *member)
+{
+ osync_trace(TRACE_ENTRY, "%s(%p)", __func__, member);
+
+ GList *f;
+ for (f = member->format_sinks; f; f = f->next) {
+ OSyncObjFormatSink *fmtsink = f->data;
+ osync_debug("OSYNC", 2, "Sending committed all to sink %s", fmtsink->format ? fmtsink->format->name : "None");
+
+ OSyncFormatFunctions functions = fmtsink->functions;
+
+ if (functions.batch_commit) {
+ GList *o = fmtsink->commit_contexts;
+ GList *c = NULL;
+
+ int i = 0;
+ OSyncChange **changes = g_malloc0(sizeof(OSyncChange *) * (g_list_length(fmtsink->commit_changes) + 1));
+ OSyncContext **contexts = g_malloc0(sizeof(OSyncContext *) * (g_list_length(fmtsink->commit_changes) + 1));;
+
+ for (c = fmtsink->commit_changes; c && o; c = c->next) {
+ OSyncChange *change = c->data;
+ OSyncContext *context = o->data;
+
+ changes[i] = change;
+ contexts[i] = context;
+
+ i++;
+ o = o->next;
+ }
+
+ changes[i] = NULL;
+ contexts[i] = NULL;
+ functions.batch_commit(member->plugindata, contexts, changes);
+
+ g_free(changes);
+ g_free(contexts);
+
+ g_list_free(fmtsink->commit_changes);
+ fmtsink->commit_changes = NULL;
+
+ g_list_free(fmtsink->commit_contexts);
+ fmtsink->commit_contexts = NULL;
+ } else if (functions.committed_all) {
+ functions.committed_all(member->plugindata);
+ }
+ }
+
+ osync_trace(TRACE_EXIT, "%s", __func__);
+}
+
OSyncObjFormatSink *osync_member_make_random_data(OSyncMember *member, OSyncChange *change, const char *objtypename)
{
int retry = 0;
Modified: trunk/opensync/opensync_member.h
===================================================================
--- trunk/opensync/opensync_member.h 2005-03-18 16:16:20 UTC (rev 380)
+++ trunk/opensync/opensync_member.h 2005-03-21 00:07:30 UTC (rev 381)
@@ -39,6 +39,7 @@
void osync_member_disconnect(OSyncMember *member, OSyncEngCallback function, void *user_data);
void osync_member_get_changeinfo(OSyncMember *member, OSyncEngCallback function, void *user_data);
void osync_member_read_change(OSyncMember *member, OSyncChange *change, OSyncEngCallback function, void *user_data);
+void osync_member_committed_all(OSyncMember *member);
void *osync_member_call_plugin(OSyncMember *member, const char *function, void *data, OSyncError **error);
void osync_member_commit_change(OSyncMember *member, OSyncChange *change, OSyncEngCallback function, void *user_data);
Modified: trunk/opensync/opensync_plugin.h
===================================================================
--- trunk/opensync/opensync_plugin.h 2005-03-18 16:16:20 UTC (rev 380)
+++ trunk/opensync/opensync_plugin.h 2005-03-21 00:07:30 UTC (rev 381)
@@ -35,6 +35,8 @@
/*! @brief The functions for accessing formats on a plugin */
typedef struct OSyncFormatFunctions {
osync_bool (* commit_change) (OSyncContext *, OSyncChange *);
+ void (* committed_all) (void *);
+ void (* batch_commit) (void *, OSyncContext **, OSyncChange **);
osync_bool (* access) (OSyncContext *, OSyncChange *);
void (* read) (OSyncContext *, OSyncChange *);
} OSyncFormatFunctions;
Modified: trunk/osengine/osengine_client.c
===================================================================
--- trunk/osengine/osengine_client.c 2005-03-18 16:16:20 UTC (rev 380)
+++ trunk/osengine/osengine_client.c 2005-03-21 00:07:30 UTC (rev 381)
@@ -41,8 +41,10 @@
client->fl_sent_changes = osync_flag_new(engine->cmb_sent_changes);
client->fl_done = osync_flag_new(NULL);
client->fl_finished = osync_flag_new(engine->cmb_finished);
- //client->fl_reset = osync_flag_new(engine->cmb_reset);
+ 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;
}
@@ -60,6 +62,7 @@
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");
@@ -170,6 +173,12 @@
return;
}
+ if (itm_message_is_methodcall(message, "COMMITTED_ALL")) {
+ osync_member_committed_all(client->member);
+ osync_trace(TRACE_EXIT, "client_message_handler");
+ return;
+ }
+
if (itm_message_is_methodcall(message, "READ_CHANGE")) {
OSyncChange *change = itm_message_get_data(message, "change");
osync_member_read_change(client->member, change, (OSyncEngCallback)message_callback, message);
Modified: trunk/osengine/osengine_client_internals.h
===================================================================
--- trunk/osengine/osengine_client_internals.h 2005-03-18 16:16:20 UTC (rev 380)
+++ trunk/osengine/osengine_client_internals.h 2005-03-21 00:07:30 UTC (rev 381)
@@ -14,6 +14,7 @@
MSyncFlag *fl_sent_changes;
MSyncFlag *fl_done;
MSyncFlag *fl_finished;
+ MSyncFlag *cmb_written;
GThread *thread;
GMainContext *context;
Modified: trunk/osengine/osengine_engine.c
===================================================================
--- trunk/osengine/osengine_engine.c 2005-03-18 16:16:20 UTC (rev 380)
+++ trunk/osengine/osengine_engine.c 2005-03-21 00:07:30 UTC (rev 381)
@@ -347,6 +347,13 @@
itm_queue_send_with_timeout(target->incoming, message, timeouts.sync_done_timeout, target);
}
+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);
+}
+
void send_disconnect(OSyncClient *target, OSyncEngine *sender)
{
osync_flag_changing(target->fl_connected);
Modified: trunk/osengine/osengine_engine_internals.h
===================================================================
--- trunk/osengine/osengine_engine_internals.h 2005-03-18 16:16:20 UTC (rev 380)
+++ trunk/osengine/osengine_engine_internals.h 2005-03-21 00:07:30 UTC (rev 381)
@@ -69,3 +69,4 @@
void send_disconnect(OSyncClient *target, OSyncEngine *sender);
void send_read_change(OSyncEngine *sender, OSyncMappingEntry *entry);
void send_engine_changed(OSyncEngine *engine);
+void send_committed_all(OSyncClient *target, OSyncEngine *sender);
|