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

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

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

revision 1.1 by joko, Sun Feb 9 05:10:13 2003 UTC revision 1.3 by joko, Tue May 13 08:19:00 2003 UTC
# Line 6  Line 6 
6  ##  ##
7  ##    ----------------------------------------------------------------------------------------  ##    ----------------------------------------------------------------------------------------
8  ##    $Log$  ##    $Log$
9    ##    Revision 1.3  2003/05/13 08:19:00  joko
10    ##    switched to crc32
11    ##
12    ##    Revision 1.2  2003/02/11 09:53:07  joko
13    ##    + metadata-structure-change, fixed some code here
14    ##
15  ##    Revision 1.1  2003/02/09 05:10:13  joko  ##    Revision 1.1  2003/02/09 05:10:13  joko
16  ##    + initial commit  ##    + initial commit
17  ##  ##
18  ##    ----------------------------------------------------------------------------------------  ##    ----------------------------------------------------------------------------------------
19    
20    
21    =pod
22    
23    =head1 Todo
24      
25      o Data::Transfer::Sync::Compare::Slot using Compare::Struct
26    
27    =cut
28    
29  package Data::Transfer::Sync::Compare::Checksum;  package Data::Transfer::Sync::Compare::Checksum;
30    
31  use strict;  use strict;
# Line 20  use warnings; Line 34  use warnings;
34  use mixin::with qw( Data::Transfer::Sync );  use mixin::with qw( Data::Transfer::Sync );
35    
36    
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   main  
   
37  use Data::Dumper;  use Data::Dumper;
 use Digest::MD5 qw(md5 md5_hex md5_base64);  
38    
39    # TODO: Load these appropriatly at runtime.
40    use Digest::MD5 qw( md5 md5_hex md5_base64 );
41    use String::CRC32;
42    
43  # get logger instance  # get logger instance
44  my $logger = Log::Dispatch::Config->instance;  my $logger = Log::Dispatch::Config->instance;
45    
46    
47    # Maybe refactor to shortcuts::checksum?
48  sub _calcChecksum {  sub _calcChecksum {
49    
50    my $self = shift;    my $self = shift;
# Line 50  sub _calcChecksum { Line 65  sub _calcChecksum {
65      #$logger->dump( __PACKAGE__ . ": " . $dump );      #$logger->dump( __PACKAGE__ . ": " . $dump );
66        
67    # calculate checksum from dump    # calculate checksum from dump
68      # note: the 32-bit integer hash from DBI seems  
69      # to generate duplicates with small payloads already in ranges of hundreds of items/rows!!!      # 1. md5-based fingerprint, base64 encoded (from Digest::MD5)
70      # try to avoid to use it or try to use it only for payloads greater than, hmmm, let's say 30 chars?        #$self->{node}->{$descent}->{checksum} = md5_base64($dump) . '==';
71      # (we had about 15 chars average per item (row))        
72        # 2. 32-bit integer "hash" value (maybe faster?) (from DBI)
73      # md5-based fingerprint, base64 encoded (from Digest::MD5)        # Note: The 32-bit integer hash from DBI seems to generate duplicates
74        $self->{node}->{$descent}->{checksum} = md5_base64($dump) . '==';        # with small payloads already in ranges of hundreds of items/rows!!!
75      # 32-bit integer "hash" value (maybe faster?) (from DBI)        # Try to avoid it or try to use it only for payloads greater than, hmmm, let's say 30 chars?
76          # (we had about 15 chars average per item (row))
77          # Possible (generic) solution: Just generate checksum, if length(checksum(payload)) < payload
78        #$self->{node}->{$descent}->{checksum} = DBI::hash($dump, 1);        #$self->{node}->{$descent}->{checksum} = DBI::hash($dump, 1);
79          
80        # 3. good ol' crc32???
81          $self->{node}->{$descent}->{checksum} = crc32($dump);
82          
83        # 4. some more modern Digest::SHA1 or similar?
84    
85    # signal good    # signal good
86      return 1;      return 1;
# Line 79  sub _readChecksum { Line 101  sub _readChecksum {
101    # trace    # trace
102      #print "desc: $descent", "\n";      #print "desc: $descent", "\n";
103      #print Dumper($self);      #print Dumper($self);
104        #print Dumper($self->{meta}->{$descent});
105      #exit;      #exit;
106    
107    # get checksum for current entry    # get checksum for current entry
108      # TODO: don't have the checksum column/property hardcoded as "cs" here, make this configurable somehow      # TODO: don't have the checksum column/property hardcoded as "cs" here, make this configurable somehow
109      if ($self->{options}->{$descent}->{storage}->{isChecksumAuthority}) {      if ($self->{meta}->{$descent}->{isChecksumAuthority}) {
110        $self->_calcChecksum($descent);        $self->_calcChecksum($descent);
111      } else {      } else {
112        $self->{node}->{$descent}->{checksum} = $self->{node}->{$descent}->{payload}->{cs};        $self->{node}->{$descent}->{checksum} = $self->{node}->{$descent}->{payload}->{cs};
# Line 96  sub _readChecksum { Line 119  sub _readChecksum {
119    
120    
121  1;  1;
122    __END__

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.3

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