/[Sack]/trunk/bin/sack.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/bin/sack.pl

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

revision 46 by dpavlin, Thu Sep 24 13:46:16 2009 UTC revision 50 by dpavlin, Thu Sep 24 19:21:55 2009 UTC
# Line 3  Line 3 
3  use warnings;  use warnings;
4  use strict;  use strict;
5    
6  our $VERSION = '0.03';  our $VERSION = '0.04';
7    
8  use Time::HiRes qw(time);  use Time::HiRes qw(time);
9  use Data::Dump qw(dump);  use Data::Dump qw(dump);
# Line 139  sub send_sock { Line 139  sub send_sock {
139  }  }
140    
141  sub merge_out {  sub merge_out {
142          my $new = shift;          my ( $from_node, $new ) = @_;
143    
144            warn "### merge $from_node";
145    
146            my $from_port = $from_node;
147            $from_port =~ s{.+:(\d+)$}{$1};
148    
149            my $remote_digest = Sack::Digest->new( port => $from_port );
150            my ( $local, $remote ) = ( 0, 0 );
151    
152          foreach my $k1 ( keys %$new ) {          foreach my $k1 ( keys %$new ) {
153    
154                  foreach my $k2 ( keys %{ $new->{$k1} } ) {                  foreach my $k2 ( keys %{ $new->{$k1} } ) {
155    
156                          my $n   = delete $new->{$k1}->{$k2};                          my $n   = delete $new->{$k1}->{$k2};
                         my $ref = ref    $out->{$k1}->{$k2};  
157    
158                            if ( $k1 =~ m{#} ) {
159                                    die "ASSERT $k1 $k2" unless $k2 =~ m{^\d+$};
160    #warn "XXX $k1 $k2";
161                                    my $md5 = $remote_digest->{nr_md5}->[$k2] || warn "[$port] no2md5 $n not found in $from_port\n";
162                                    if ( my $local_k2 = $digest->{md5_nr}->{$md5} ) {
163                                            $k2 = $local_k2;
164                                            $local++;
165                                    } else {
166                                            $k2 = $digest->to_int( $remote_digest->{md5}->{$md5} );
167                                            $remote++;
168                                    }
169                            }
170    
171                            my $ref = ref    $out->{$k1}->{$k2};
172    #warn "XXXX $k1 $k2 $ref";
173                          if ( ! defined $out->{$k1}->{$k2} ) {                          if ( ! defined $out->{$k1}->{$k2} ) {
174                                  $out->{$k1}->{$k2} = $n;                                  $out->{$k1}->{$k2} = $n;
175                          } elsif ( $k1 =~ m{\+} ) {                          } elsif ( $k1 =~ m{\+} ) {
# Line 167  sub merge_out { Line 189  sub merge_out {
189                  }                  }
190          }          }
191    
192            warn "[$port] merge local $local remote $remote from $from_port\n";
193          warn "## merge out ", dump $out if $debug;          warn "## merge out ", dump $out if $debug;
194  }  }
195    
# Line 214  sub run_code { Line 237  sub run_code {
237                          my $s = length $o;                          my $s = length $o;
238                          $o = thaw $o;                          $o = thaw $o;
239                          warn "[$port] merge $node $s bytes\n";                          warn "[$port] merge $node $s bytes\n";
240                          merge_out $o;                          merge_out $node => $o;
241                  }                  }
242          }          }
243  }  }

Legend:
Removed from v.46  
changed lines
  Added in v.50

  ViewVC Help
Powered by ViewVC 1.1.26