/[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.2 by joko, Tue Feb 11 09:53:07 2003 UTC revision 1.4 by jonen, Thu May 6 12:53:07 2004 UTC
# Line 6  Line 6 
6  ##  ##
7  ##    ----------------------------------------------------------------------------------------  ##    ----------------------------------------------------------------------------------------
8  ##    $Log$  ##    $Log$
9    ##    Revision 1.4  2004/05/06 12:53:07  jonen
10    ##    + added use of File::RsycP::digest
11    ##
12    ##    Revision 1.3  2003/05/13 08:19:00  joko
13    ##    switched to crc32
14    ##
15  ##    Revision 1.2  2003/02/11 09:53:07  joko  ##    Revision 1.2  2003/02/11 09:53:07  joko
16  ##    + metadata-structure-change, fixed some code here  ##    + metadata-structure-change, fixed some code here
17  ##  ##
# Line 15  Line 21 
21  ##    ----------------------------------------------------------------------------------------  ##    ----------------------------------------------------------------------------------------
22    
23    
24    =pod
25    
26    =head1 Todo
27      
28      o Data::Transfer::Sync::Compare::Slot using Compare::Struct
29    
30    =cut
31    
32  package Data::Transfer::Sync::Compare::Checksum;  package Data::Transfer::Sync::Compare::Checksum;
33    
34  use strict;  use strict;
# Line 23  use warnings; Line 37  use warnings;
37  use mixin::with qw( Data::Transfer::Sync );  use mixin::with qw( Data::Transfer::Sync );
38    
39    
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   main  
   
40  use Data::Dumper;  use Data::Dumper;
 use Digest::MD5 qw(md5 md5_hex md5_base64);  
41    
42    # TODO: Load these appropriatly at runtime.
43    use Digest::MD5 qw( md5 md5_hex md5_base64 );
44    use String::CRC32;
45    use File::RsyncP::Digest;
46    
47  # get logger instance  # get logger instance
48  my $logger = Log::Dispatch::Config->instance;  my $logger = Log::Dispatch::Config->instance;
49    
50    
51    # Maybe refactor to shortcuts::checksum?
52  sub _calcChecksum {  sub _calcChecksum {
53    
54    my $self = shift;    my $self = shift;
# Line 53  sub _calcChecksum { Line 69  sub _calcChecksum {
69      #$logger->dump( __PACKAGE__ . ": " . $dump );      #$logger->dump( __PACKAGE__ . ": " . $dump );
70        
71    # calculate checksum from dump    # calculate checksum from dump
72      # note: the 32-bit integer hash from DBI seems  
73      # to generate duplicates with small payloads already in ranges of hundreds of items/rows!!!      # 1. md5-based fingerprint, base64 encoded (from Digest::MD5)
74      # 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) . '==';
75      # (we had about 15 chars average per item (row))        
76        # 2. 32-bit integer "hash" value (maybe faster?) (from DBI)
77      # md5-based fingerprint, base64 encoded (from Digest::MD5)        # Note: The 32-bit integer hash from DBI seems to generate duplicates
78        $self->{node}->{$descent}->{checksum} = md5_base64($dump) . '==';        # with small payloads already in ranges of hundreds of items/rows!!!
79      # 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?
80          # (we had about 15 chars average per item (row))
81          # Possible (generic) solution: Just generate checksum, if length(checksum(payload)) < payload
82        #$self->{node}->{$descent}->{checksum} = DBI::hash($dump, 1);        #$self->{node}->{$descent}->{checksum} = DBI::hash($dump, 1);
83          
84        # 3. good ol' crc32???
85          #$self->{node}->{$descent}->{checksum} = crc32($dump);
86          
87        # 4. File::RsyncP::Digest - Perl interface to rsync message digest algorithms
88          my $rsDigest = new File::RsyncP::Digest;
89          $rsDigest->add($dump);
90          my $digest = $rsDigest->digest();
91          $self->{node}->{$descent}->{checksum} = unpack("H*", $digest);
92    
93        # 5. some more modern Digest::SHA1 or similar?
94    
95    # signal good    # signal good
96      return 1;      return 1;
# Line 100  sub _readChecksum { Line 129  sub _readChecksum {
129    
130    
131  1;  1;
132    __END__

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

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