Lines 19-25
Link Here
|
19 |
@DBNAMES @DB_EXTENSIONS |
19 |
@DBNAMES @DB_EXTENSIONS |
20 |
$NSPAM_MAGIC_TOKEN $NHAM_MAGIC_TOKEN $LAST_EXPIRE_MAGIC_TOKEN |
20 |
$NSPAM_MAGIC_TOKEN $NHAM_MAGIC_TOKEN $LAST_EXPIRE_MAGIC_TOKEN |
21 |
$NTOKENS_MAGIC_TOKEN $OLDEST_TOKEN_AGE_MAGIC_TOKEN |
21 |
$NTOKENS_MAGIC_TOKEN $OLDEST_TOKEN_AGE_MAGIC_TOKEN |
22 |
$SCANCOUNT_BASE_MAGIC_TOKEN |
22 |
$SCANCOUNT_BASE_MAGIC_TOKEN $NOW_REBUILDING_MAGIC_TOKEN |
23 |
}; |
23 |
}; |
24 |
|
24 |
|
25 |
@ISA = qw(); |
25 |
@ISA = qw(); |
Lines 66-71
Link Here
|
66 |
$LAST_EXPIRE_MAGIC_TOKEN = '**LASTEXPIRE'; |
66 |
$LAST_EXPIRE_MAGIC_TOKEN = '**LASTEXPIRE'; |
67 |
$NTOKENS_MAGIC_TOKEN = '**NTOKENS'; |
67 |
$NTOKENS_MAGIC_TOKEN = '**NTOKENS'; |
68 |
$SCANCOUNT_BASE_MAGIC_TOKEN = '**SCANBASE'; |
68 |
$SCANCOUNT_BASE_MAGIC_TOKEN = '**SCANBASE'; |
|
|
69 |
$NOW_REBUILDING_MAGIC_TOKEN = '**NOWREBUILDING'; |
69 |
|
70 |
|
70 |
use constant MAX_SIZE_FOR_SCAN_COUNT_FILE => 5000; |
71 |
use constant MAX_SIZE_FOR_SCAN_COUNT_FILE => 5000; |
71 |
|
72 |
|
Lines 316-321
Link Here
|
316 |
|| $tok eq $LAST_EXPIRE_MAGIC_TOKEN |
317 |
|| $tok eq $LAST_EXPIRE_MAGIC_TOKEN |
317 |
|| $tok eq $NTOKENS_MAGIC_TOKEN |
318 |
|| $tok eq $NTOKENS_MAGIC_TOKEN |
318 |
|| $tok eq $OLDEST_TOKEN_AGE_MAGIC_TOKEN |
319 |
|| $tok eq $OLDEST_TOKEN_AGE_MAGIC_TOKEN |
|
|
320 |
|| $tok eq $NOW_REBUILDING_MAGIC_TOKEN |
319 |
|| $tok eq $SCANCOUNT_BASE_MAGIC_TOKEN); |
321 |
|| $tok eq $SCANCOUNT_BASE_MAGIC_TOKEN); |
320 |
|
322 |
|
321 |
my ($ts, $th, $atime) = $self->tok_get ($tok); |
323 |
my ($ts, $th, $atime) = $self->tok_get ($tok); |
Lines 341-348
Link Here
|
341 |
} |
343 |
} |
342 |
} |
344 |
} |
343 |
|
345 |
|
344 |
if ($showdots && (($kept + $deleted) % 1000) == 0) { |
346 |
if ((($kept + $deleted) % 1000) == 0) { |
345 |
print STDERR "."; |
347 |
# update "now expiring" token. |
|
|
348 |
$self->{db_toks}->{$NOW_REBUILDING_MAGIC_TOKEN} = time(); |
349 |
if ($showdots) { print STDERR "."; } |
346 |
} |
350 |
} |
347 |
} |
351 |
} |
348 |
|
352 |
|
Lines 374-379
Link Here
|
374 |
$new_toks{$NHAM_MAGIC_TOKEN} = $self->{db_toks}->{$NHAM_MAGIC_TOKEN}; |
378 |
$new_toks{$NHAM_MAGIC_TOKEN} = $self->{db_toks}->{$NHAM_MAGIC_TOKEN}; |
375 |
$new_toks{$NTOKENS_MAGIC_TOKEN} = $kept + $reprieved; |
379 |
$new_toks{$NTOKENS_MAGIC_TOKEN} = $kept + $reprieved; |
376 |
|
380 |
|
|
|
381 |
# ensure this is NOT set in the new db |
382 |
delete $new_toks{$NOW_REBUILDING_MAGIC_TOKEN}; |
383 |
|
377 |
# now untie so we can do renames |
384 |
# now untie so we can do renames |
378 |
untie %{$self->{db_toks}}; |
385 |
untie %{$self->{db_toks}}; |
379 |
untie %new_toks; |
386 |
untie %new_toks; |
Lines 391-397
Link Here
|
391 |
# ok, once that's done we can re-tie. Call untie_db() first so |
398 |
# ok, once that's done we can re-tie. Call untie_db() first so |
392 |
# we unlock correctly etc. first |
399 |
# we unlock correctly etc. first |
393 |
$self->untie_db(); |
400 |
$self->untie_db(); |
394 |
$self->tie_db_writable(); |
|
|
395 |
|
401 |
|
396 |
my $done = time(); |
402 |
my $done = time(); |
397 |
|
403 |
|
Lines 427-432
Link Here
|
427 |
if (!$ntoks || $ntoks =~ /\D/) |
433 |
if (!$ntoks || $ntoks =~ /\D/) |
428 |
{ $ntoks = $self->{expiry_min_db_size} + 1; } |
434 |
{ $ntoks = $self->{expiry_min_db_size} + 1; } |
429 |
if ($ntoks <= $self->{expiry_min_db_size}) { |
435 |
if ($ntoks <= $self->{expiry_min_db_size}) { |
|
|
436 |
dbg ("bayes: expiry not needed, db too small ($ntoks)"); |
437 |
return 0; |
438 |
} |
439 |
|
440 |
# is the database currently being expired, or did an expiry attempt |
441 |
# fail for some reason in the last 300 seconds? |
442 |
my $timenow = time(); |
443 |
my $amexping = $self->{db_toks}->{$NOW_REBUILDING_MAGIC_TOKEN}; |
444 |
if (defined ($amexping) && $timenow - $amexping < 300) { # TODO: conf item? |
445 |
dbg ("bayes: expiry already in progress ($amexping)"); |
430 |
return 0; |
446 |
return 0; |
431 |
} |
447 |
} |
432 |
|
448 |
|
Lines 441-446
Link Here
|
441 |
return 1; |
457 |
return 1; |
442 |
} |
458 |
} |
443 |
|
459 |
|
|
|
460 |
dbg ("bayes: expiry not needed, happened recently ($last, now=$now)"); |
444 |
0; |
461 |
0; |
445 |
} |
462 |
} |
446 |
|
463 |
|
Lines 583-588
Link Here
|
583 |
my $showdots = $opts->{showdots}; |
600 |
my $showdots = $opts->{showdots}; |
584 |
my $retirepath = $path.".old"; |
601 |
my $retirepath = $path.".old"; |
585 |
|
602 |
|
|
|
603 |
# Set this now. Unset it at end of expire_old_tokens_trapped(). |
604 |
# NOTE: we do NOT unset it on error. If something went |
605 |
# wrong, give the server 300 secs to recover in case it was |
606 |
# a system-level problem, or caused by load. |
607 |
$self->{db_toks}->{$NOW_REBUILDING_MAGIC_TOKEN} = $started; |
608 |
|
586 |
# now read the retired journal |
609 |
# now read the retired journal |
587 |
if (!open (JOURNAL, "<$path")) { |
610 |
if (!open (JOURNAL, "<$path")) { |
588 |
warn "bayes: cannot open read $path\n"; |
611 |
warn "bayes: cannot open read $path\n"; |
Lines 613-621
Link Here
|
613 |
warn "Bayes journal: gibberish entry found: $_"; |
636 |
warn "Bayes journal: gibberish entry found: $_"; |
614 |
} |
637 |
} |
615 |
|
638 |
|
616 |
# if ($showdots && ($count % 1000) == 0) { |
639 |
if (($total_count % 1000) == 0) { |
617 |
# print STDERR "."; |
640 |
# update "now expiring" token. |
618 |
# } |
641 |
$self->{db_toks}->{$NOW_REBUILDING_MAGIC_TOKEN} = time(); |
|
|
642 |
# if ($showdots) { print STDERR "."; } |
643 |
} |
619 |
} |
644 |
} |
620 |
close JOURNAL; |
645 |
close JOURNAL; |
621 |
|
646 |
|
Lines 625-632
Link Here
|
625 |
while( my($k,$v) = each %tokens ) { |
650 |
while( my($k,$v) = each %tokens ) { |
626 |
$self->tok_touch_token ($v, $k); |
651 |
$self->tok_touch_token ($v, $k); |
627 |
|
652 |
|
628 |
if ($showdots && (++$count % 1000) == 0) { |
653 |
if ((++$count % 1000) == 0) { |
629 |
print STDERR "."; |
654 |
# update "now expiring" token. |
|
|
655 |
$self->{db_toks}->{$NOW_REBUILDING_MAGIC_TOKEN} = time(); |
656 |
if ($showdots) { print STDERR "."; } |
630 |
} |
657 |
} |
631 |
} |
658 |
} |
632 |
|
659 |
|