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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Sun Feb 9 05:10:13 2003 UTC (21 years, 6 months ago) by joko
Branch: MAIN
+ initial commit

1 joko 1.1 ## $Id: StorageInterface.pm,v 1.1 2003/01/20 16:58:46 joko Exp $
2     ##
3     ## Copyright (c) 2002 Andreas Motl <andreas.motl@ilo.de>
4     ##
5     ## See COPYRIGHT section in pod text below for usage and distribution rights.
6     ##
7     ## ----------------------------------------------------------------------------------------
8     ## $Log: StorageInterface.pm,v $
9     ## ----------------------------------------------------------------------------------------
10    
11    
12     package Data::Transfer::Sync::Compare::Checksum;
13    
14     use strict;
15     use warnings;
16    
17     use mixin::with qw( Data::Transfer::Sync );
18    
19    
20     # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - main
21    
22     use Data::Dumper;
23     use Digest::MD5 qw(md5 md5_hex md5_base64);
24    
25    
26     # get logger instance
27     my $logger = Log::Dispatch::Config->instance;
28    
29    
30     sub _calcChecksum {
31    
32     my $self = shift;
33     my $descent = shift;
34     my $specifier = shift;
35    
36     # calculate checksum for current object
37     my $ident = $self->{node}->{$descent}->{ident};
38    
39     # build dump of this node
40     my $payload = $self->{node}->{$descent}->{payload};
41     #my $dump = $ident . "\n" . $item->quickdump();
42     #my $dump = $ident . "\n" . Dumper($item);
43     my $dump = $ident . "\n" . $self->_dumpCompact($payload);
44    
45     # TODO: $logger->dump( ... );
46     #$logger->debug( __PACKAGE__ . ": " . $dump );
47     #$logger->dump( __PACKAGE__ . ": " . $dump );
48    
49     # calculate checksum from dump
50     # note: the 32-bit integer hash from DBI seems
51     # to generate duplicates with small payloads already in ranges of hundreds of items/rows!!!
52     # try to avoid to use it or try to use it only for payloads greater than, hmmm, let's say 30 chars?
53     # (we had about 15 chars average per item (row))
54    
55     # md5-based fingerprint, base64 encoded (from Digest::MD5)
56     $self->{node}->{$descent}->{checksum} = md5_base64($dump) . '==';
57     # 32-bit integer "hash" value (maybe faster?) (from DBI)
58     #$self->{node}->{$descent}->{checksum} = DBI::hash($dump, 1);
59    
60     # signal good
61     return 1;
62    
63     }
64    
65    
66     sub _readChecksum {
67     my $self = shift;
68    
69     my $descent = shift;
70    
71     # signal checksum bad
72     if (!$self->{node}->{$descent}) {
73     return;
74     }
75    
76     # trace
77     #print "desc: $descent", "\n";
78     #print Dumper($self);
79     #exit;
80    
81     # get checksum for current entry
82     # TODO: don't have the checksum column/property hardcoded as "cs" here, make this configurable somehow
83     if ($self->{options}->{$descent}->{storage}->{isChecksumAuthority}) {
84     $self->_calcChecksum($descent);
85     } else {
86     $self->{node}->{$descent}->{checksum} = $self->{node}->{$descent}->{payload}->{cs};
87     }
88    
89     # signal checksum good
90     return 1;
91    
92     }
93    
94    
95     1;

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