From: <dg...@su...> - 2009-01-10 21:04:55
|
Author: dgollub Date: Sat Jan 10 22:04:12 2009 New Revision: 5069 URL: http://www.opensync.org/changeset/5069 Log: Introduce engine event/command PREPARE_WRITE. This is a placeholder for conversion and merging changes. Modified: trunk/opensync/engine/opensync_engine.c trunk/opensync/engine/opensync_engine.h trunk/opensync/engine/opensync_engine_private.h trunk/opensync/engine/opensync_obj_engine.c trunk/tests/support.c trunk/tests/support.h Modified: trunk/opensync/engine/opensync_engine.c ============================================================================== --- trunk/opensync/engine/opensync_engine.c Sat Jan 10 17:53:57 2009 (r5068) +++ trunk/opensync/engine/opensync_engine.c Sat Jan 10 22:04:12 2009 (r5069) @@ -876,6 +876,28 @@ } } +static void _osync_engine_generate_prepared_map(OSyncEngine *engine) +{ + + if (osync_bitcount(engine->obj_errors | engine->obj_prepared_map) == g_list_length(engine->object_engines)) { + if (osync_bitcount(engine->obj_errors)) { + OSyncError *locerror = NULL; + osync_error_set(&locerror, OSYNC_ERROR_GENERIC, "At least one object engine failed while preparing for mapping the changes. Aborting"); + osync_trace(TRACE_ERROR, "%s", osync_error_print(&locerror)); + osync_engine_set_error(engine, locerror); + osync_status_update_engine(engine, OSYNC_ENGINE_EVENT_ERROR, locerror); + osync_engine_event(engine, OSYNC_ENGINE_EVENT_ERROR); + osync_error_unref(&locerror); + } else { + osync_status_update_engine(engine, OSYNC_ENGINE_EVENT_PREPARED_MAP, NULL); + + osync_engine_event(engine, OSYNC_ENGINE_EVENT_PREPARED_MAP); + } + } else + osync_trace(TRACE_INTERNAL, "Not yet: %i", osync_bitcount(engine->obj_errors | engine->obj_prepared_map)); + +} + static void _osync_engine_generate_mapped_event(OSyncEngine *engine) { @@ -1261,6 +1283,9 @@ case OSYNC_ENGINE_EVENT_READ: engine->obj_get_changes = engine->obj_get_changes | (0x1 << position); break; + case OSYNC_ENGINE_EVENT_PREPARED_MAP: + engine->obj_prepared_map = engine->obj_prepared_map | (0x1 << position); + break; case OSYNC_ENGINE_EVENT_MAPPED: engine->obj_mapped = engine->obj_mapped | (0x1 << position); break; @@ -1302,6 +1327,9 @@ case OSYNC_ENGINE_EVENT_READ: _osync_engine_generate_get_changes_event(engine); break; + case OSYNC_ENGINE_EVENT_PREPARED_MAP: + _osync_engine_generate_prepared_map(engine); + break; case OSYNC_ENGINE_EVENT_MAPPED: _osync_engine_generate_mapped_event(engine); break; @@ -1583,6 +1611,7 @@ break; case OSYNC_ENGINE_COMMAND_CONNECT_DONE: case OSYNC_ENGINE_COMMAND_READ: + case OSYNC_ENGINE_COMMAND_PREPARE_MAP: case OSYNC_ENGINE_COMMAND_MAP: break; case OSYNC_ENGINE_COMMAND_END_CONFLICTS: @@ -1724,6 +1753,15 @@ break; case OSYNC_ENGINE_EVENT_READ: + /* Now that we have read everything, we prepare for mapping the changes */ + for (o = engine->object_engines; o; o = o->next) { + OSyncObjEngine *objengine = o->data; + if (!osync_obj_engine_command(objengine, OSYNC_ENGINE_COMMAND_PREPARE_MAP, &locerror)) + goto error; + } + + break; + case OSYNC_ENGINE_EVENT_PREPARED_MAP: /* Now that we have read everything, we map the changes */ for (o = engine->object_engines; o; o = o->next) { OSyncObjEngine *objengine = o->data; @@ -2261,6 +2299,9 @@ case OSYNC_ENGINE_COMMAND_PREPARE_WRITE: cmdstr = "PREPARE_WRITE"; break; + case OSYNC_ENGINE_COMMAND_PREPARE_MAP: + cmdstr = "PREPARE_MAP"; + break; } return cmdstr; @@ -2310,6 +2351,9 @@ case OSYNC_ENGINE_EVENT_PREPARED_WRITE: eventstr = "PREPARE_WRITE"; break; + case OSYNC_ENGINE_EVENT_PREPARED_MAP: + eventstr = "PREPARE_MAP"; + break; } return eventstr; Modified: trunk/opensync/engine/opensync_engine.h ============================================================================== --- trunk/opensync/engine/opensync_engine.h Sat Jan 10 17:53:57 2009 (r5068) +++ trunk/opensync/engine/opensync_engine.h Sat Jan 10 22:04:12 2009 (r5069) @@ -73,8 +73,9 @@ /* Check if all conflicts got solved */ OSYNC_ENGINE_COMMAND_END_CONFLICTS, /* Prepare write to peers */ - OSYNC_ENGINE_COMMAND_PREPARE_WRITE - + OSYNC_ENGINE_COMMAND_PREPARE_WRITE, + /* Prepare mapping of changes */ + OSYNC_ENGINE_COMMAND_PREPARE_MAP } OSyncEngineCmd; @@ -132,8 +133,10 @@ OSYNC_ENGINE_EVENT_MAPPED, /** Multiplying of all reported changes is completed */ OSYNC_ENGINE_EVENT_MULTIPLIED, - /* Engine completed with preparing a write */ - OSYNC_ENGINE_EVENT_PREPARED_WRITE + /** Engine completed with preparing a write */ + OSYNC_ENGINE_EVENT_PREPARED_WRITE, + /** Engien completed with preparing for the mapping */ + OSYNC_ENGINE_EVENT_PREPARED_MAP } OSyncEngineEvent; typedef enum { Modified: trunk/opensync/engine/opensync_engine_private.h ============================================================================== --- trunk/opensync/engine/opensync_engine_private.h Sat Jan 10 17:53:57 2009 (r5068) +++ trunk/opensync/engine/opensync_engine_private.h Sat Jan 10 22:04:12 2009 (r5069) @@ -121,6 +121,7 @@ int obj_connect_done; int obj_disconnects; int obj_get_changes; + int obj_prepared_map; int obj_mapped; int obj_solved; int obj_multiplied; Modified: trunk/opensync/engine/opensync_obj_engine.c ============================================================================== --- trunk/opensync/engine/opensync_obj_engine.c Sat Jan 10 17:53:57 2009 (r5068) +++ trunk/opensync/engine/opensync_obj_engine.c Sat Jan 10 22:04:12 2009 (r5069) @@ -1001,6 +1001,12 @@ } break; + case OSYNC_ENGINE_COMMAND_PREPARE_MAP: + + /* TODO: PLACEHOLDER for conversion and merge */ + + osync_obj_engine_event(engine, OSYNC_ENGINE_EVENT_PREPARED_MAP, *error); + break; case OSYNC_ENGINE_COMMAND_MAP: /* We are now done reading the changes. so we can now start to create the mappings, conflicts etc */ if (osync_obj_engine_map_changes(engine, error)) { Modified: trunk/tests/support.c ============================================================================== --- trunk/tests/support.c Sat Jan 10 17:53:57 2009 (r5068) +++ trunk/tests/support.c Sat Jan 10 22:04:12 2009 (r5069) @@ -371,6 +371,10 @@ fail_unless(!osync_error_is_set(&(status->error)), NULL); num_engine_read++; break; + case OSYNC_ENGINE_EVENT_PREPARED_MAP: + fail_unless(!osync_error_is_set(&(status->error)), NULL); + num_engine_prepared_map++; + break; case OSYNC_ENGINE_EVENT_MAPPED: fail_unless(!osync_error_is_set(&(status->error)), NULL); num_engine_mapped++; @@ -584,6 +588,7 @@ num_engine_connected = 0; num_engine_read = 0; + num_engine_prepared_map = 0; num_engine_mapped = 0; num_engine_multiplied = 0; num_engine_written = 0; Modified: trunk/tests/support.h ============================================================================== --- trunk/tests/support.h Sat Jan 10 17:53:57 2009 (r5068) +++ trunk/tests/support.h Sat Jan 10 22:04:12 2009 (r5069) @@ -36,6 +36,7 @@ int num_engine_connected; int num_engine_connect_done; int num_engine_read; +int num_engine_prepared_map; int num_engine_mapped; int num_engine_multiplied; int num_engine_prepared_write; |