--- nfo/perl/libs/Data/Transfer/Sync.pm 2002/12/13 21:49:34 1.7 +++ nfo/perl/libs/Data/Transfer/Sync.pm 2002/12/23 07:10:59 1.11 @@ -1,4 +1,4 @@ -## $Id: Sync.pm,v 1.7 2002/12/13 21:49:34 joko Exp $ +## $Id: Sync.pm,v 1.11 2002/12/23 07:10:59 joko Exp $ ## ## Copyright (c) 2002 Andreas Motl ## @@ -6,6 +6,19 @@ ## ## ---------------------------------------------------------------------------------------- ## $Log: Sync.pm,v $ +## Revision 1.11 2002/12/23 07:10:59 joko +## + using MD5 for checksum generation again - the 32-bit integer hash from DBI seems to be too lazy +## +## Revision 1.10 2002/12/19 01:07:16 joko +## + fixed output done via $logger +## +## Revision 1.9 2002/12/16 07:02:34 jonen +## + added comment +## +## Revision 1.8 2002/12/15 02:03:09 joko +## + fixed logging-messages +## + additional metadata-checks +## ## Revision 1.7 2002/12/13 21:49:34 joko ## + sub configure ## + sub checkOptions @@ -117,7 +130,7 @@ $opts->{erase} ||= 0; #$opts->{import} ||= 0; - $logger->info( __PACKAGE__ . "->prepareOptions( source_node $opts->{source_node} mode $opts->{mode} erase $opts->{erase} prepare $opts->{prepare} )"); + $logger->notice( __PACKAGE__ . "->prepareOptions( source_node $opts->{source_node} mode $opts->{mode} erase $opts->{erase} prepare $opts->{prepare} )"); if (!$opts->{mapping} || !$opts->{mapping_module}) { $logger->warning( __PACKAGE__ . "->prepareOptions: No mapping supplied - please check key 'mappings' in BizWorks/Config.pm"); @@ -319,12 +332,33 @@ # check partners/nodes: does partner exist / is node available? foreach my $partner (keys %{$self->{meta}}) { - next if $self->{meta}->{$partner}->{storage}->{locator}->{type} eq 'DBI'; # for DBD::CSV - re-enable for others + + # 1. check partners & storages + if (!$self->{meta}->{$partner}) { + $logger->critical( __PACKAGE__ . "->syncNodes: Could not find partner '$partner' in configuration metadata." ); + return; + } + + my $dbkey = $self->{meta}->{$partner}->{dbkey}; + + if (!$self->{meta}->{$partner}->{storage}) { + $logger->critical( __PACKAGE__ . "->syncNodes: Could not access storage of partner '$partner' (named '$dbkey'), looks like a configuration-error." ); + return; + } + + # TODO: + # 2. check if partners (and nodes?) are actually available.... + # eventually pre-check mode of access-attempt (read/write) here to provide an "early-croak" if possible + + # 3. check nodes + next if $self->{meta}->{$partner}->{storage}->{locator}->{type} eq 'DBI'; # HACK for DBD::CSV - re-enable for others + # get node-name my $node = $self->{meta}->{$partner}->{node}; if (!$self->{meta}->{$partner}->{storage}->existsChildNode($node)) { - $logger->critical( __PACKAGE__ . "->syncNodes: Could not reach \"$node\" at \"$partner\"." ); + $logger->critical( __PACKAGE__ . "->syncNodes: Could not reach node \"$node\" at partner \"$partner\"." ); return; } + } # TODO: @@ -620,6 +654,7 @@ } +# refactor this as some core-function to do a generic dump resolving data-encapsulations of e.g. Set::Object sub _dumpCompact { my $self = shift; @@ -683,10 +718,15 @@ #$logger->dump( __PACKAGE__ . ": " . $dump ); # calculate checksum from dump + # note: the 32-bit integer hash from DBI seems + # to generate duplicates with small payloads already in ranges of hundreds of items/rows!!! + # try to avoid to use it or try to use it only for payloads greater than, hmmm, let's say 30 chars? + # (we had about 15 chars average per item (row)) + # md5-based fingerprint, base64 encoded (from Digest::MD5) - #my $checksum_cur = md5_base64($objdump) . '=='; + $self->{node}->{$descent}->{checksum} = md5_base64($dump) . '=='; # 32-bit integer "hash" value (maybe faster?) (from DBI) - $self->{node}->{$descent}->{checksum} = DBI::hash($dump, 1); + #$self->{node}->{$descent}->{checksum} = DBI::hash($dump, 1); # signal good return 1;