/[BackupPC]/trunk/bin/BackupPC_updatedb
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/BackupPC_updatedb

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

revision 235 by dpavlin, Thu Nov 10 15:07:10 2005 UTC revision 249 by dpavlin, Fri Dec 9 16:27:49 2005 UTC
# Line 16  use BackupPC::SearchLib; Line 16  use BackupPC::SearchLib;
16  use constant BPC_FTYPE_DIR => 5;  use constant BPC_FTYPE_DIR => 5;
17  use constant EST_CHUNK => 100000;  use constant EST_CHUNK => 100000;
18    
19    # daylight saving time change offset for 1h
20    my $dst_offset = 60 * 60;
21    
22  my $debug = 0;  my $debug = 0;
23  $|=1;  $|=1;
24    
# Line 50  my $dbh = DBI->connect($dsn, $user, "", Line 53  my $dbh = DBI->connect($dsn, $user, "",
53    
54  my %opt;  my %opt;
55    
56  if ( !getopts("cdm:v:ij", \%opt ) ) {  if ( !getopts("cdm:v:ijf", \%opt ) ) {
57          print STDERR <<EOF;          print STDERR <<EOF;
58  usage: $0 [-c|-d] [-m num] [-v|-v level] [-i]  usage: $0 [-c|-d] [-m num] [-v|-v level] [-i|-j|-f]
59    
60  Options:  Options:
61          -c      create database on first use          -c      create database on first use
# Line 61  Options: Line 64  Options:
64          -v num  set verbosity (debug) level (default $debug)          -v num  set verbosity (debug) level (default $debug)
65          -i      update Hyper Estraier full text index          -i      update Hyper Estraier full text index
66          -j      update full text, don't check existing files          -j      update full text, don't check existing files
67            -f      don't do anything with full text index
68    
69  Option -j is variation on -i. It will allow faster initial creation  Option -j is variation on -i. It will allow faster initial creation
70  of full-text index from existing database.  of full-text index from existing database.
71    
72    Option -f will create database which is out of sync with full text index. You
73    will have to re-run $0 with -i to fix it.
74    
75  EOF  EOF
76          exit 1;          exit 1;
77  }  }
# Line 72  EOF Line 79  EOF
79  if ($opt{v}) {  if ($opt{v}) {
80          print "Debug level at $opt{v}\n";          print "Debug level at $opt{v}\n";
81          $debug = $opt{v};          $debug = $opt{v};
82    } elsif ($opt{f}) {
83            print "WARNING: disabling full-text index update. You need to re-run $0 -j !\n";
84            ($use_hest, $index_path, $index_node_url) = (undef, undef, undef);
85  }  }
86    
87  #---- subs ----  #---- subs ----
# Line 111  sub hest_update { Line 121  sub hest_update {
121    
122          my $skip_check = $opt{j} && print STDERR "Skipping check for existing files -- this should be used only with initital import\n";          my $skip_check = $opt{j} && print STDERR "Skipping check for existing files -- this should be used only with initital import\n";
123    
124          unless ($use_hest) {          unless (defined($use_hest)) {
125                  print STDERR "HyperEstraier support not enabled in configuration\n";                  print STDERR "HyperEstraier support not enabled in configuration\n";
126                    $use_hest = 0;
127                  return;                  return;
128          }          }
129    
130            return unless($use_hest);
131    
132          print curr_time," updating HyperEstraier:";          print curr_time," updating HyperEstraier:";
133    
134          my $t = time();          my $t = time();
# Line 209  sub hest_update { Line 222  sub hest_update {
222                          $doc->add_attr('@uri', $uri);                          $doc->add_attr('@uri', $uri);
223    
224                          foreach my $c (@{ $sth->{NAME} }) {                          foreach my $c (@{ $sth->{NAME} }) {
225                                  $doc->add_attr($c, $row->{$c}) if ($row->{$c});                                  $doc->add_attr($c, $row->{$c}) if (defined($row->{$c}));
226                          }                          }
227    
228                          #$doc->add_attr('@cdate', fmt_date($row->{'date'}));                          #$doc->add_attr('@cdate', fmt_date($row->{'date'}));
# Line 256  sub hest_update { Line 269  sub hest_update {
269    
270    
271  ## update index ##  ## update index ##
272  if (($opt{i} || $opt{j} || ($index_path && ! -e $index_path)) && !$opt{c}) {  if (($opt{i} || $opt{j} || ($index_path && ! -e $TopDir . $index_path)) && !$opt{c}) {
273          # update all          # update all
274          print "force update of HyperEstraier index ";          print "force update of HyperEstraier index ";
275          print "importing existing data" unless (-e $index_path);          print "importing existing data" unless (-e $TopDir . $index_path);
276          print "by -i flag" if ($opt{i});          print "by -i flag" if ($opt{i});
277          print "by -j flag" if ($opt{j});          print "by -j flag" if ($opt{j});
278          print "\n";          print "\n";
# Line 434  WHERE hostID=? AND num=? AND shareid=? Line 447  WHERE hostID=? AND num=? AND shareid=?
447    
448  $sth->{insert_backups} = $dbh->prepare(qq{  $sth->{insert_backups} = $dbh->prepare(qq{
449  INSERT INTO backups (hostID, num, date, type, shareid, size)  INSERT INTO backups (hostID, num, date, type, shareid, size)
450  VALUES (?,?,?,?,?,?)  VALUES (?,?,?,?,?,-1)
451    });
452    
453    $sth->{update_backups_size} = $dbh->prepare(qq{
454    UPDATE backups SET size = ?
455    WHERE hostID = ? and num = ? and date = ? and type =? and shareid = ?
456  });  });
457    
458  $sth->{insert_files} = $dbh->prepare(qq{  $sth->{insert_files} = $dbh->prepare(qq{
# Line 443  INSERT INTO files Line 461  INSERT INTO files
461          VALUES (?,?,?,?,?,?,?)          VALUES (?,?,?,?,?,?,?)
462  });  });
463    
464  foreach my $host_key (keys %{$hosts}) {  my @hosts = keys %{$hosts};
465    my $host_nr = 0;
466    
467    foreach my $host_key (@hosts) {
468    
469          my $hostname = $hosts->{$host_key}->{'host'} || die "can't find host for $host_key";          my $hostname = $hosts->{$host_key}->{'host'} || die "can't find host for $host_key";
470    
# Line 458  foreach my $host_key (keys %{$hosts}) { Line 479  foreach my $host_key (keys %{$hosts}) {
479                  $hostID = $dbh->last_insert_id(undef,undef,'hosts',undef);                  $hostID = $dbh->last_insert_id(undef,undef,'hosts',undef);
480          }          }
481    
482          print "host ".$hosts->{$host_key}->{'host'}.": ";          $host_nr++;
483            print "host ", $hosts->{$host_key}->{'host'}, " [",
484                    $host_nr, "/", ($#hosts + 1), "]: ";
485    
486          # get backups for a host          # get backups for a host
487          my @backups = $bpc->BackupInfoRead($hostname);          my @backups = $bpc->BackupInfoRead($hostname);
# Line 500  foreach my $host_key (keys %{$hosts}) { Line 523  foreach my $host_key (keys %{$hosts}) {
523                          # dump some log                          # dump some log
524                          print curr_time," ", $share;                          print curr_time," ", $share;
525    
                         my ($f, $nf, $d, $nd, $size) = recurseDir($bpc, $hostname, $files, $backupNum, $share, "", $shareID);  
   
526                          $sth->{insert_backups}->execute(                          $sth->{insert_backups}->execute(
527                                  $hostID,                                  $hostID,
528                                  $backupNum,                                  $backupNum,
529                                  $backup->{'endTime'},                                  $backup->{'endTime'},
530                                  substr($backup->{'type'},0,4),                                  substr($backup->{'type'},0,4),
531                                  $shareID,                                  $shareID,
532                            );
533    
534                            my ($f, $nf, $d, $nd, $size) = recurseDir($bpc, $hostname, $files, $backupNum, $share, "", $shareID);
535    
536                            $sth->{update_backups_size}->execute(
537                                  $size,                                  $size,
538                                    $hostID,
539                                    $backupNum,
540                                    $backup->{'endTime'},
541                                    substr($backup->{'type'},0,4),
542                                    $shareID,
543                          );                          );
544    
545                          print " commit";                          print " commit";
# Line 575  sub found_in_db { Line 606  sub found_in_db {
606                  SELECT 1 FROM files                  SELECT 1 FROM files
607                  WHERE shareID = ? and                  WHERE shareID = ? and
608                          path = ? and                          path = ? and
609                          date = ? and                          size = ? and
610                          size = ?                          ( date = ? or date = ? or date = ? )
611                  LIMIT 1                  LIMIT 1
612          });          });
613    
614          my @param = ($shareID,$path,$date,$size);          my @param = ($shareID,$path,$size,$date, $date-$dst_offset, $date+$dst_offset);
615          $sth->{file_in_db}->execute(@param);          $sth->{file_in_db}->execute(@param);
616          my $rows = $sth->{file_in_db}->rows;          my $rows = $sth->{file_in_db}->rows;
617          print STDERR "## found_in_db($shareID,$path,$date,$size) ",( $rows ? '+' : '-' ), join(" ",@param), "\n" if ($debug >= 3);          print STDERR "## found_in_db($shareID,$path,$date,$size) ",( $rows ? '+' : '-' ), join(" ",@param), "\n" if ($debug >= 3);
# Line 630  sub recurseDir($$$$$$$$) { Line 661  sub recurseDir($$$$$$$$) {
661                                  $filesInBackup->{$path_key}->{'size'}                                  $filesInBackup->{$path_key}->{'size'}
662                          ));                          ));
663    
664                            my $key_dst_prev = join(" ", (
665                                    $shareID,
666                                    $dir,
667                                    $path_key,
668                                    $filesInBackup->{$path_key}->{'mtime'} - $dst_offset,
669                                    $filesInBackup->{$path_key}->{'size'}
670                            ));
671    
672                            my $key_dst_next = join(" ", (
673                                    $shareID,
674                                    $dir,
675                                    $path_key,
676                                    $filesInBackup->{$path_key}->{'mtime'} + $dst_offset,
677                                    $filesInBackup->{$path_key}->{'size'}
678                            ));
679    
680                          my $found;                          my $found;
681                          if (! defined($beenThere->{$key}) && ! ($found = found_in_db($key, @data)) ) {                          if (
682                                    ! defined($beenThere->{$key}) &&
683                                    ! defined($beenThere->{$key_dst_prev}) &&
684                                    ! defined($beenThere->{$key_dst_next}) &&
685                                    ! ($found = found_in_db($key, @data))
686                            ) {
687                                  print STDERR "# key: $key [", $beenThere->{$key},"]" if ($debug >= 2);                                  print STDERR "# key: $key [", $beenThere->{$key},"]" if ($debug >= 2);
688    
689                                  if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {                                  if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {

Legend:
Removed from v.235  
changed lines
  Added in v.249

  ViewVC Help
Powered by ViewVC 1.1.26