]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/NNTP.pm
remove redundant NewsGroup class
[public-inbox.git] / lib / PublicInbox / NNTP.pm
index ac536f71fb703d882fb9466760652df46e51f9b8..58b86a8297a5ba5e4a60941c5533277530e9235d 100644 (file)
@@ -11,6 +11,7 @@ use PublicInbox::Search;
 use PublicInbox::Msgmap;
 use PublicInbox::Git;
 use PublicInbox::MID qw(mid2path);
+require PublicInbox::EvCleanup;
 use Email::Simple;
 use POSIX qw(strftime);
 use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
@@ -38,15 +39,15 @@ my $LIST_HEADERS = join("\r\n", @OVERVIEW,
 my %DISABLED; # = map { $_ => 1 } qw(xover list_overview_fmt newnews xhdr);
 
 my $EXPMAP; # fd -> [ idle_time, $self ]
-my $EXPTIMER;
+my $expt;
 our $EXPTIME = 180; # 3 minutes
 my $WEAKEN = {}; # string(nntpd) -> nntpd
-my $WEAKTIMER;
+my $weakt;
+my $nextt;
 
-my $next_tick;
 my $nextq = [];
 sub next_tick () {
-       $next_tick = undef;
+       $nextt = undef;
        my $q = $nextq;
        $nextq = [];
        foreach my $nntp (@$q) {
@@ -70,7 +71,7 @@ sub update_idle_time ($) {
 # reduce FD pressure by closing some "git cat-file --batch" processes
 # and unused FDs for msgmap and Xapian indices
 sub weaken_groups () {
-       $WEAKTIMER = undef;
+       $weakt = undef;
        foreach my $nntpd (values %$WEAKEN) {
                $_->weaken_all foreach (@{$nntpd->{grouplist}});
        }
@@ -81,7 +82,6 @@ sub expire_old () {
        my $now = now();
        my $exp = $EXPTIME;
        my $old = $now - $exp;
-       my $next = $now + $exp;
        my $nr = 0;
        my %new;
        while (my ($fd, $v) = each %$EXPMAP) {
@@ -89,26 +89,22 @@ sub expire_old () {
                if ($idle_time < $old) {
                        $nntp->close; # idempotent
                } else {
-                       my $nexp = $idle_time + $exp;
-                       $next = $nexp if ($nexp < $next);
                        ++$nr;
                        $new{$fd} = $v;
                }
        }
        $EXPMAP = \%new;
        if ($nr) {
-               $next -= $now;
-               $next = 0 if $next < 0;
-               $EXPTIMER = Danga::Socket->AddTimer($next, *expire_old);
+               $expt = PublicInbox::EvCleanup::later(*expire_old);
                weaken_groups();
        } else {
-               $EXPTIMER = undef;
+               $expt = undef;
                # noop to kick outselves out of the loop ASAP so descriptors
                # really get closed
-               Danga::Socket->AddTimer(0, sub {});
+               PublicInbox::EvCleanup::asap(sub {});
 
                # grace period for reaping resources
-               $WEAKTIMER ||= Danga::Socket->AddTimer(30, *weaken_groups);
+               $weakt ||= PublicInbox::EvCleanup::later(*weaken_groups);
        }
 }
 
@@ -122,7 +118,7 @@ sub new ($$$) {
        $self->watch_read(1);
        update_idle_time($self);
        $WEAKEN->{"$nntpd"} = $nntpd;
-       $EXPTIMER ||= Danga::Socket->AddTimer($EXPTIME, *expire_old);
+       $expt ||= PublicInbox::EvCleanup::later(*expire_old);
        $self;
 }
 
@@ -199,7 +195,7 @@ sub list_active_times ($;$) {
        foreach my $ng (@{$self->{nntpd}->{grouplist}}) {
                $ng->{newsgroup} =~ $wildmat or next;
                my $c = eval { $ng->mm->created_at } || time;
-               more($self, "$ng->{newsgroup} $c $ng->{address}");
+               more($self, "$ng->{newsgroup} $c $ng->{-primary_address}");
        }
 }
 
@@ -417,7 +413,8 @@ sub cmd_last ($) { article_adj($_[0], -1) }
 sub cmd_post ($) {
        my ($self) = @_;
        my $ng = $self->{ng};
-       $ng ? "440 mailto:$ng->{address} to post" : '440 posting not allowed'
+       $ng ? "440 mailto:$ng->{-primary_address} to post"
+               : '440 posting not allowed'
 }
 
 sub cmd_quit ($) {
@@ -442,8 +439,8 @@ sub set_nntp_headers {
        # clobber some
        $hdr->header_set('Newsgroups', $ng->{newsgroup});
        $hdr->header_set('Xref', xref($ng, $n));
-       header_append($hdr, 'List-Post', "<mailto:$ng->{address}>");
-       if (my $url = $ng->{url}) {
+       header_append($hdr, 'List-Post', "<mailto:$ng->{-primary_address}>");
+       if (my $url = $ng->base_url) {
                $mid = uri_escape_utf8($mid);
                header_append($hdr, 'Archived-At', "<$url$mid/>");
                header_append($hdr, 'List-Archive', "<$url>");
@@ -633,7 +630,7 @@ sub long_response ($$$$) {
                        update_idle_time($self);
 
                        push @$nextq, $self;
-                       $next_tick ||= Danga::Socket->AddTimer(0, *next_tick);
+                       $nextt ||= PublicInbox::EvCleanup::asap(*next_tick);
                } else { # all done!
                        $self->{long_res} = undef;
                        $self->watch_read(1);
@@ -996,7 +993,7 @@ sub watch_read {
                # in case we really did dispatch a read event and started
                # another long response.
                push @$nextq, $self;
-               $next_tick ||= Danga::Socket->AddTimer(0, *next_tick);
+               $nextt ||= PublicInbox::EvCleanup::asap(*next_tick);
        }
        $rv;
 }