| 18 |  |  | 
| 19 | <UL> | <UL> | 
| 20 |  |  | 
| 21 | <LI><A HREF="#20030118  integration with torus">2003-01-18  -  integration with Torus</A></LI> | <LI><A HREF="#20030209  backward compatibility with custom application">2003-02-09  -  backward compatibility with custom application</A></LI> | 
| 22 | <LI><A HREF="#20021010  initial checkin">2002-10-10  -  initial check-in</A></LI> | <LI><A HREF="#20030118  start integration with torus">2003-01-18  -  start integration with Torus</A></LI> | 
| 23 |  | <LI><A HREF="#20021010  initial commit">2002-10-10  -  initial commit</A></LI> | 
| 24 | </UL> | </UL> | 
| 25 |  |  | 
| 26 | </UL> | </UL> | 
| 29 |  |  | 
| 30 | <LI><A HREF="#description">DESCRIPTION</A></LI> | <LI><A HREF="#description">DESCRIPTION</A></LI> | 
| 31 | <LI><A HREF="#requirements">REQUIREMENTS</A></LI> | <LI><A HREF="#requirements">REQUIREMENTS</A></LI> | 
| 32 | <LI><A HREF="#authors / copyright">AUTHORS / COPYRIGHT</A></LI> | <LI><A HREF="#authors / copyright / license">AUTHORS / COPYRIGHT / LICENSE</A></LI> | 
| 33 | <LI><A HREF="#support / warranty">SUPPORT / WARRANTY</A></LI> | <LI><A HREF="#support / warranty">SUPPORT / WARRANTY</A></LI> | 
| 34 |  | <LI><A HREF="#example output chunks">EXAMPLE OUTPUT CHUNKS</A></LI> | 
| 35 |  | <UL> | 
| 36 |  |  | 
| 37 |  | <LI><A HREF="#synchronizing orm objects against entries in a .csv file  17 items modified">synchronizing orm objects against entries in a .csv file - 17 items modified</A></LI> | 
| 38 |  | <LI><A HREF="#synchronizing orm objects against entries in a .csv file  insync">synchronizing orm objects against entries in a .csv file - in-sync</A></LI> | 
| 39 |  | </UL> | 
| 40 |  |  | 
| 41 | <LI><A HREF="#bugs">BUGS</A></LI> | <LI><A HREF="#bugs">BUGS</A></LI> | 
| 42 | <LI><A HREF="#user level errors">USER LEVEL ERRORS</A></LI> | <LI><A HREF="#user level errors">USER LEVEL ERRORS</A></LI> | 
| 43 | <UL> | <UL> | 
| 66 | <HR> | <HR> | 
| 67 | <H1><A NAME="news">NEWS</A></H1> | <H1><A NAME="news">NEWS</A></H1> | 
| 68 | <P> | <P> | 
| 69 | <H4><A NAME="20030118  integration with torus">2003-01-18  -  integration with Torus</A></H4> | <H4><A NAME="20030209  backward compatibility with custom application">2003-02-09  -  backward compatibility with custom application</A></H4> | 
| 70 | <PRE> | <PRE> | 
| 71 | please look at <A HREF="http://www.netfrag.org/horde/chora/cvs.php/perl/scripts/outlook2ldap/">http://www.netfrag.org/horde/chora/cvs.php/perl/scripts/outlook2ldap/</A></PRE> | - Tangram <-> .csv | 
| 72 |  | - Tangram <-> mysql | 
| 73 |  | - Tangram <-> perl-code</PRE> | 
| 74 | <P> | <P> | 
| 75 | <H4><A NAME="20021010  initial checkin">2002-10-10  -  initial check-in</A></H4> | <H4><A NAME="20030118  start integration with torus">2003-01-18  -  start integration with Torus</A></H4> | 
| 76 |  | <PRE> | 
| 77 |  | - MAPI <-> LDAP | 
| 78 |  | - please look at <A HREF="http://www.netfrag.org/horde/chora/cvs.php/perl/scripts/outlook2ldap/">http://www.netfrag.org/horde/chora/cvs.php/perl/scripts/outlook2ldap/</A></PRE> | 
| 79 |  | <P> | 
| 80 |  | <H4><A NAME="20021010  initial commit">2002-10-10  -  initial commit</A></H4> | 
| 81 |  | <PRE> | 
| 82 |  | - Tangram <-> mysql</PRE> | 
| 83 | <P> | <P> | 
| 84 | <HR> | <HR> | 
| 85 | <H1><A NAME="description">DESCRIPTION</A></H1> | <H1><A NAME="description">DESCRIPTION</A></H1> | 
| 86 | <P>Data::Transfer::Sync is a module providing a generic synchronization process | <PRE> | 
| 87 | across arbitrary/multiple storages based on a ident/checksum mechanism. | Data::Transfer::Sync is a module providing a generic synchronization process | 
| 88 | It sits on top of Data::Storage.</P> | across arbitrary/multiple storages based on a ident/checksum mechanism. | 
| 89 |  | It sits on top of Data::Storage.</PRE> | 
| 90 | <P> | <P> | 
| 91 | <HR> | <HR> | 
| 92 | <H1><A NAME="requirements">REQUIREMENTS</A></H1> | <H1><A NAME="requirements">REQUIREMENTS</A></H1> | 
| 93 | <PRE> | <PRE> | 
| 94 | For full functionality: | For full functionality: | 
| 95 |  | Data::Compare | 
| 96 | Data::Storage | Data::Storage | 
| 97 | Data::Transform | Data::Transform | 
| 98 | Data::Compare | ... and all their dependencies.</PRE> | 
|  | ... and all their dependencies</PRE> |  | 
| 99 | <P> | <P> | 
| 100 | <HR> | <HR> | 
| 101 | <H1><A NAME="authors / copyright">AUTHORS / COPYRIGHT</A></H1> | <H1><A NAME="authors / copyright / license">AUTHORS / COPYRIGHT / LICENSE</A></H1> | 
| 102 | <P>The Data::Storage module is Copyright (c) 2002 Andreas Motl. | <PRE> | 
| 103 | All rights reserved.</P> | The Data::Transfer::Sync module is Copyright (c) 2002 Andreas Motl. | 
| 104 | <P>You may distribute it under the terms of either the GNU General Public | All rights reserved.</PRE> | 
| 105 | License or the Artistic License, as specified in the Perl README file.</P> | <PRE> | 
| 106 |  | Contributions by Sebastian Utz <su@tunemedia.de> and | 
| 107 |  | Jan Hoffmann <jan@romain-volk.com>.</PRE> | 
| 108 |  | <PRE> | 
| 109 |  | You may distribute it under the terms of either the GNU General Public | 
| 110 |  | License or the Artistic License, as specified in the Perl README file.</PRE> | 
| 111 | <P> | <P> | 
| 112 | <HR> | <HR> | 
| 113 | <H1><A NAME="support / warranty">SUPPORT / WARRANTY</A></H1> | <H1><A NAME="support / warranty">SUPPORT / WARRANTY</A></H1> | 
| 114 | <P>Data::Storage is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.</P> | <PRE> | 
| 115 |  | Data::Transfer::Sync is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.</PRE> | 
| 116 |  | <P> | 
| 117 |  | <HR> | 
| 118 |  | <H1><A NAME="example output chunks">EXAMPLE OUTPUT CHUNKS</A></H1> | 
| 119 |  | <P> | 
| 120 |  | <H2><A NAME="synchronizing orm objects against entries in a .csv file  17 items modified">synchronizing orm objects against entries in a .csv file - 17 items modified</A></H2> | 
| 121 |  | <PRE> | 
| 122 |  | notice: PULL INTO backend NODE * TYPE Country SELECT NODE * TYPE [n/a] FROM base USING MODULE BizWorks::ResourceMapping; | 
| 123 |  | notice: OEF::Script::AbstractFeeder: | 
| 124 |  | - Loading data of type [n/a] and | 
| 125 |  | filtered by * from the storage named base | 
| 126 |  | to the storage named backend - filtered by *. | 
| 127 |  | - Will attempt to convert the data to Country. | 
| 128 |  | info: Data::Transfer::Sync::API->syncNodes: source=backend/* [Country] <- target=base/* [] | 
| 129 |  | :c:c:c:c:c:c:c:ctr:c:c:c:c:c:c:c:ctr:c:c:c:c:c:c:ctr:c:ctr:c:c:c:c:c:c:c:c:c:c:c:ctr:c:c:c:ctr:c:c:c:c:c:c:c:ctr:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c | 
| 130 |  | :c:c:c:c:c:c:c:c:ctr:c:c:c:c:c:c:c:c:c:c:c:ctr:c:c:c:c:ctr:c:c:c:ctr:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:ctr:ctr:c:c:c:c:ctr:c:c:c:c:c:c:c | 
| 131 |  | :c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:ctr:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:ctr:c:c:ctr:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c | 
| 132 |  | info: Data::Transfer::Sync::Core->_startsync: statistics: in_sync: 180  /  total: 197  /  attempt_modify: 17  /  ok: 17</PRE> | 
| 133 |  | <P> | 
| 134 |  | <H2><A NAME="synchronizing orm objects against entries in a .csv file  insync">synchronizing orm objects against entries in a .csv file - in-sync</A></H2> | 
| 135 |  | <PRE> | 
| 136 |  |  | 
| 137 |  | notice: PULL INTO backend NODE * TYPE Country SELECT NODE * TYPE [n/a] FROM base USING MODULE BizWorks::ResourceMapping; | 
| 138 |  | notice: OEF::Script::AbstractFeeder: | 
| 139 |  | - Loading data of type [n/a] and | 
| 140 |  | filtered by * from the storage named base | 
| 141 |  | to the storage named backend - filtered by *. | 
| 142 |  | - Will attempt to convert the data to Country. | 
| 143 |  | info: Data::Transfer::Sync::API->syncNodes: source=backend/* [Country] <- target=base/* [] | 
| 144 |  | :c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c | 
| 145 |  | :c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c | 
| 146 |  | :c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c:c | 
| 147 |  | info: Data::Transfer::Sync::Core->_startsync: statistics: in_sync: 197  /  total: 197</PRE> | 
| 148 | <P> | <P> | 
| 149 | <HR> | <HR> | 
| 150 | <H1><A NAME="bugs">BUGS</A></H1> | <H1><A NAME="bugs">BUGS</A></H1> | 
| 232 | <HR> | <HR> | 
| 233 | <H1><A NAME="todo">TODO</A></H1> | <H1><A NAME="todo">TODO</A></H1> | 
| 234 | <PRE> | <PRE> | 
| 235 | - sub _resolveIdentProvider | o sub _resolveIdentProvider | 
| 236 | - wrap _doModifySource and _doTransferTarget around a core function which can change virtually any type of node | x wrap _doModifySource and _doTransferTarget around a core function which can change virtually any type of node | 
| 237 | - split this module up into Sync.pm, Sync/Core.pm, Sync/Compare.pm and Sync/Compare/Checksum.pm | x split this module up into Sync.pm, Sync/Core.pm, Sync/Compare.pm and Sync/Compare/Checksum.pm | 
| 238 | - introduce _compareNodes as a core method and wrap it around methods in Sync/Compare/Checksum.pm | o introduce _compareNodes as a core method and wrap it around methods in Sync/Compare/Checksum.pm | 
| 239 | - introduce Sync/Compare/MyComparisonImplementation.pm | x introduce Sync/Compare/MyComparisonImplementation.pm | 
| 240 | - some generic deferring method - e.g. "$self->defer(action)" - to be able to accumulate a bunch of actions for later processing | o some generic deferring method - e.g. "$self->defer(action)" - to be able to accumulate a bunch of actions for later processing | 
| 241 | - this implies everything done is _really_ split up into generic actions - how else would we defer them??? | - this implies everything done is _really_ split up into generic actions - how else would we defer them??? | 
| 242 | - example uses: | - example uses: | 
| 243 | - fetch whole checksum list from node | - fetch whole checksum list from node | 
| 244 | - remember source ident retransmits | - remember source ident retransmits | 
| 245 | - remember: this is convenient - and maybe / of course faster - but we'll loose "per-node-atomic" operations | - remember: this is convenient - and maybe / of course faster - but we'll loose "per-node-atomic" operations | 
| 246 | - feature: mechanism to implicit inject checksum property to nodes (alter table / modify schema) | o feature: mechanism to implicit inject checksum property to nodes (alter table / modify schema) | 
| 247 | - expand statistics / keep track of: | o expand statistics / keep track of: | 
| 248 | - touched/untouched nodes | - touched/untouched nodes | 
| 249 | - full sync | o full sync | 
| 250 | - just do a push and a pull for now but use stats for touched nodes in between to speed up things | - just do a push and a pull for now but use stats for touched nodes in between to speed up things | 
| 251 | - introduce some new metadata flags for a synchronization partner which is (e.g.) of "source" or "target": | o introduce some new metadata flags for a descent | 
| 252 | - isNewNodePropagator | - isNewNodePropagator | 
| 253 | - isWriteProtected</PRE> | x isWriteProtected</PRE> | 
| 254 |  |  | 
| 255 | </BODY> | </BODY> | 
| 256 |  |  |