/[cvs]/nfo/perl/libs/Data/Transfer/Sync.pm
ViewVC logotype

Diff of /nfo/perl/libs/Data/Transfer/Sync.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4 by joko, Tue Dec 3 15:54:07 2002 UTC revision 1.5 by joko, Thu Dec 5 08:06:05 2002 UTC
# Line 6  Line 6 
6  ##  ##
7  ##    ----------------------------------------------------------------------------------------  ##    ----------------------------------------------------------------------------------------
8  ##    $Log$  ##    $Log$
9    ##    Revision 1.5  2002/12/05 08:06:05  joko
10    ##    + bugfix with determining empty fields (Null) with DBD::CSV
11    ##    + debugging
12    ##    + updated comments
13    ##
14  ##    Revision 1.4  2002/12/03 15:54:07  joko  ##    Revision 1.4  2002/12/03 15:54:07  joko
15  ##    + {import}-flag is now {prepare}-flag  ##    + {import}-flag is now {prepare}-flag
16  ##  ##
# Line 255  sub _syncNodes { Line 260  sub _syncNodes {
260      $results ||= $self->_getNodeList('source', $filter);      $results ||= $self->_getNodeList('source', $filter);
261    }    }
262        
263    # get reference to node list from convenient method provided by corehandle    # get reference to node list from convenient method provided by CORE-HANDLE
264    #$results ||= $self->{source}->getListUnfiltered($self->{meta}->{source}->{node});    #$results ||= $self->{source}->getListUnfiltered($self->{meta}->{source}->{node});
265    #$results ||= $self->{meta}->{source}->{storage}->getListUnfiltered($self->{meta}->{source}->{node});    #$results ||= $self->{meta}->{source}->{storage}->getListUnfiltered($self->{meta}->{source}->{node});
266    $results ||= $self->_getNodeList('source');    $results ||= $self->_getNodeList('source');
# Line 333  sub _syncNodes { Line 338  sub _syncNodes {
338      my $identOK = $self->_resolveNodeIdent('source');      my $identOK = $self->_resolveNodeIdent('source');
339      #if (!$identOK && lc $self->{args}->{direction} ne 'import') {      #if (!$identOK && lc $self->{args}->{direction} ne 'import') {
340      if (!$identOK) {      if (!$identOK) {
341        $logger->critical( __PACKAGE__ . "->syncNodes: Can not synchronize: No ident found in source node, maybe try to \"import\" this node first." );        #print Dumper($self->{meta}->{source});
342          $logger->critical( __PACKAGE__ . "->syncNodes: No ident found in source node \"$self->{meta}->{source}->{node}\", try to \"prepare\" this node first?" );
343        return;        return;
344      }      }
345    
346  #print "statload", "\n";  #print "statload", "\n";
347  #print "ident: ", $self->{node}->{source}->{ident}, "\n";  #print "ident: ", $self->{node}->{source}->{ident}, "\n";
348    #print Dumper($self->{node});
349            
350      my $statOK = $self->_statloadNode('target', $self->{node}->{source}->{ident});      my $statOK = $self->_statloadNode('target', $self->{node}->{source}->{ident});
351    
352    #print Dumper($self->{node});
353            
354      # mark node as new either if there's no ident or if stat/load failed      # mark node as new either if there's no ident or if stat/load failed
355      if (!$statOK) {      if (!$statOK) {
# Line 427  sub _syncNodes { Line 436  sub _syncNodes {
436        $tc->{attempt_new}++;        $tc->{attempt_new}++;
437        $self->_doTransferToTarget('insert');        $self->_doTransferToTarget('insert');
438        # asymmetry: refetch node from target to re-calculate new ident and checksum (TODO: is IdentAuthority of relevance here?)        # asymmetry: refetch node from target to re-calculate new ident and checksum (TODO: is IdentAuthority of relevance here?)
439          #print Dumper($self->{node});
440        $self->_statloadNode('target', $self->{node}->{target}->{ident}, 1);        $self->_statloadNode('target', $self->{node}->{target}->{ident}, 1);
441        $self->_readChecksum('target');        $self->_readChecksum('target');
442    
# Line 452  sub _syncNodes { Line 462  sub _syncNodes {
462      # change ident in source (take from target), if transfer was ok and target is an IdentAuthority      # change ident in source (take from target), if transfer was ok and target is an IdentAuthority
463      # this is (for now) called a "retransmit" indicated by a "r"-character when verbosing      # this is (for now) called a "retransmit" indicated by a "r"-character when verbosing
464      if ($self->{node}->{status}->{ok} && $self->{meta}->{target}->{storage}->{isIdentAuthority}) {      if ($self->{node}->{status}->{ok} && $self->{meta}->{target}->{storage}->{isIdentAuthority}) {
465          print "r" if $self->{verbose};
466        #print Dumper($self->{meta});        #print Dumper($self->{meta});
467        #print Dumper($self->{node});        #print Dumper($self->{node});
468        #exit;        #exit;
469        $self->_doModifySource_IdentChecksum($self->{node}->{target}->{ident});        $self->_doModifySource_IdentChecksum($self->{node}->{target}->{ident});
       print "r" if $self->{verbose};  
470      }      }
471    
472      print ":" if $self->{verbose};      print ":" if $self->{verbose};
# Line 494  sub _dumpCompact { Line 504  sub _dumpCompact {
504      my $item = {};      my $item = {};
505      foreach my $key (keys %$_) {      foreach my $key (keys %$_) {
506        my $val = $_->{$key};        my $val = $_->{$key};
507    
508    #print Dumper($val);
509    
510        if (ref $val eq 'Set::Object') {        if (ref $val eq 'Set::Object') {
511          #print "========================= SET", "\n";          #print "========================= SET", "\n";
512          #print Dumper($val);  #print Dumper($val);
513          #print Dumper($val->members());          #print Dumper($val->members());
514          #$val = $val->members();          #$val = $val->members();
515          #$vars->[$count]->{$key} = $val->members() if $val->can("members");          #$vars->[$count]->{$key} = $val->members() if $val->can("members");
516          #$item->{$key} = $val->members() if $val->can("members");          #$item->{$key} = $val->members() if $val->can("members");
517          $item->{$key} = $val->members();          $item->{$key} = $val->members();
518          #print Dumper($vars->[$count]->{$key});          #print Dumper($vars->[$count]->{$key});
519    
520        } else {        } else {
521          $item->{$key} = $val;          $item->{$key} = $val;
522        }        }
523    
524      }      }
525      push @data, $item;      push @data, $item;
526      $count++;      $count++;
527    }    }
528    
529  #print "Dump:", "\n";  #print "Dump:", Dumper(@data), "\n";
 #print Dumper(@data);  
530    
531    $Data::Dumper::Indent = 0;    $Data::Dumper::Indent = 0;
532    my $result = Dumper(@data);    my $result = Dumper(@data);
533    $Data::Dumper::Indent = 2;    $Data::Dumper::Indent = 2;
534    return $result;    return $result;
535      
536  }  }
537    
538    
# Line 747  sub _modifyNode { Line 762  sub _modifyNode {
762      }      }
763    }    }
764        
765      
766      #print Dumper($self->{meta});
767    
768    # DBI speaks SQL    # DBI speaks SQL
769    if ($self->{meta}->{$descent}->{storage}->{locator}->{type} eq 'DBI') {    if ($self->{meta}->{$descent}->{storage}->{locator}->{type} eq 'DBI') {
# Line 848  sub _modifyNode { Line 865  sub _modifyNode {
865        hash2object($object, $map);        hash2object($object, $map);
866    
867        # ... and re-update@orm.        # ... and re-update@orm.
868    #print Dumper($object);
869        $self->{meta}->{$descent}->{storage}->update($object);        $self->{meta}->{$descent}->{storage}->update($object);
870    
871        # asymmetry: get ident after insert        # asymmetry: get ident after insert
872        # TODO:        # TODO:
873        #   - just do this if it is an IdentAuthority        #   - just do this if it is an IdentAuthority
874        #   - use IdentProvider metadata here        #   - use IdentProvider metadata here
875        $self->{node}->{$descent}->{ident} = $self->{meta}->{$descent}->{storage}->id($object);  #print Dumper($self->{meta}->{$descent});
876          my $oid = $self->{meta}->{$descent}->{storage}->id($object);
877    #print "oid: $oid", "\n";
878          $self->{node}->{$descent}->{ident} = $oid;
879    
880    
881      } elsif (lc $action eq 'update') {      } elsif (lc $action eq 'update') {
# Line 951  sub _statloadNode { Line 972  sub _statloadNode {
972        #print "\n", "Attempt to fetch entry implicitely by ident failed: no ident given! This may result in an insert if no write-protection is in the way.", "\n";        #print "\n", "Attempt to fetch entry implicitely by ident failed: no ident given! This may result in an insert if no write-protection is in the way.", "\n";
973        return;        return;
974      }      }
975        
976        # patch for DBD::CSV
977        if ($ident && $ident eq 'Null') {
978          return;
979        }
980    
981      my $result = $self->{meta}->{$descent}->{storage}->sendQuery({      my $result = $self->{meta}->{$descent}->{storage}->sendQuery({
982        node => $self->{meta}->{$descent}->{node},        node => $self->{meta}->{$descent}->{node},
# Line 965  sub _statloadNode { Line 991  sub _statloadNode {
991      my $entry = $result->getNextEntry();      my $entry = $result->getNextEntry();
992      my $status = $result->getStatus();      my $status = $result->getStatus();
993    
994    #print Dumper($status);
995        
996      # TODO: enhance error handling (store inside tc)      # TODO: enhance error handling (store inside tc)
997      #if (!$row) {      #if (!$row) {
998      #  print "\n", "row error", "\n";      #  print "\n", "row error", "\n";
999      #  next;      #  next;
1000      #}      #}
1001      if (($status && $status->{err}) || !$entry) {  
1002        #$logger->critical( __PACKAGE__ . "->_loadNode (ident=\"$ident\") failed" );      # these checks run before actually loading payload- and meta-data to node-container
1003        return;      
1004      }        # 1st level - hard error
1005          if ($status && $status->{err}) {
1006            $logger->debug( __PACKAGE__ . "->_statloadNode (ident=\"$ident\") failed - hard error (that's ok)" );
1007            return;
1008          }
1009      
1010          # 2nd level - logical (empty/notfound) error
1011          if (($status && $status->{empty}) || !$entry) {
1012            $logger->debug( __PACKAGE__ . "->_statloadNode (ident=\"$ident\") failed - logical error (that's ok)" );
1013            #print "no entry (logical)", "\n";
1014            return;
1015          }
1016    
1017    #print Dumper($entry);
1018    
1019      # was:      # was:
1020      # $self->{node}->{$descent}->{ident} = $ident;        # $self->{node}->{$descent}->{ident} = $ident;  
1021      # is:      # is:
1022      # TODO: re-resolve ident from entry via metadata "IdentProvider"      # TODO: re-resolve ident from entry via metadata "IdentProvider" here - like elsewhere
1023      $self->{node}->{$descent}->{ident} = $ident;      $self->{node}->{$descent}->{ident} = $ident;
1024      $self->{node}->{$descent}->{payload} = $entry;      $self->{node}->{$descent}->{payload} = $entry;
1025    
1026    }    }
1027        
1028    return 1;    return 1;
# Line 1003  sub _doModifySource_IdentChecksum { Line 1046  sub _doModifySource_IdentChecksum {
1046      $self->{meta}->{source}->{IdentProvider}->{arg} => $ident_new,      $self->{meta}->{source}->{IdentProvider}->{arg} => $ident_new,
1047      cs => $self->{node}->{target}->{checksum},      cs => $self->{node}->{target}->{checksum},
1048    };    };
1049    #print Dumper($map);  
1050    #print Dumper($self->{node});  #print Dumper($map);
1051    #exit;  #print Dumper($self->{node});
1052    #exit;
1053    
1054    $self->_modifyNode('source', 'update', $map);    $self->_modifyNode('source', 'update', $map);
1055  }  }
1056    
# Line 1087  sub _prepareNode_DummyIdent { Line 1132  sub _prepareNode_DummyIdent {
1132      }      }
1133      my $crit = join ' AND ', @crits;      my $crit = join ' AND ', @crits;
1134      print "p" if $self->{verbose};      print "p" if $self->{verbose};
1135    
1136    #print Dumper($map);
1137    #print Dumper($crit);
1138    
1139      $self->_modifyNode($descent, 'update', $map, $crit);      $self->_modifyNode($descent, 'update', $map, $crit);
1140      $i++;      $i++;
1141    }    }

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed