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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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