* [PATCH 0/4] more tweaks and finalize WwwStream conversion
@ 2016-07-07 1:50 7% Eric Wong
2016-07-07 1:50 6% ` [PATCH 3/4] inbox: cleanup and consolidate object weakening Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2016-07-07 1:50 UTC (permalink / raw)
To: meta
Finally, we now have consistent HTML for all of our non-error
pages and we have fewer layering violations for cleanup.
Eric Wong (4):
githttpbackend: avoid intermediate array creation from stat
t/git-http-backend: check BSD::Resource availability
inbox: cleanup and consolidate object weakening
www: remove old footer generation code and normalize new.html
lib/PublicInbox/Feed.pm | 86 ++++++++++-----------------------------
lib/PublicInbox/GitHTTPBackend.pm | 3 +-
lib/PublicInbox/HTTP.pm | 16 --------
lib/PublicInbox/Inbox.pm | 37 +++++++++++++++--
lib/PublicInbox/NNTP.pm | 17 --------
lib/PublicInbox/View.pm | 47 ++++++++++++++++-----
lib/PublicInbox/WWW.pm | 44 +-------------------
t/cgi.t | 17 +-------
t/git-http-backend.t | 2 +-
t/html_index.t | 16 --------
t/plack.t | 4 +-
11 files changed, 98 insertions(+), 191 deletions(-)
^ permalink raw reply [relevance 7%]
* [PATCH 3/4] inbox: cleanup and consolidate object weakening
2016-07-07 1:50 7% [PATCH 0/4] more tweaks and finalize WwwStream conversion Eric Wong
@ 2016-07-07 1:50 6% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2016-07-07 1:50 UTC (permalink / raw)
To: meta
This fixes some layering violations and consolidates
the cleanup into the inbox object itself. Keeping in
mind weakening does not work at all without our PSGI
server.
---
lib/PublicInbox/HTTP.pm | 16 ----------------
lib/PublicInbox/Inbox.pm | 37 +++++++++++++++++++++++++++++++++----
lib/PublicInbox/NNTP.pm | 17 -----------------
lib/PublicInbox/WWW.pm | 2 --
4 files changed, 33 insertions(+), 39 deletions(-)
diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm
index e19c592..abf648f 100644
--- a/lib/PublicInbox/HTTP.pm
+++ b/lib/PublicInbox/HTTP.pm
@@ -25,15 +25,6 @@ use constant {
CHUNK_MAX_HDR => 256,
};
-# FIXME: duplicated code with NNTP.pm, layering violation
-my $WEAKEN = {}; # string(inbox) -> inbox
-my $weakt;
-sub weaken_task () {
- $weakt = undef;
- $_->weaken_all for values %$WEAKEN;
- $WEAKEN = {};
-}
-
my $pipelineq = [];
my $pipet;
sub process_pipelineq () {
@@ -252,13 +243,6 @@ sub response_done ($$) {
$self->{env} = undef;
$self->write("0\r\n\r\n") if $alive == 2;
$self->write(sub { $alive ? next_request($self) : $self->close });
-
- # FIXME: layering violation
- if (my $obj = $env->{'pi-httpd.inbox'}) {
- # grace period for reaping resources
- $WEAKEN->{"$obj"} = $obj;
- PublicInbox::EvCleanup::later(*weaken_task);
- }
}
sub getline_response {
diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm
index 728caa0..dc9980b 100644
--- a/lib/PublicInbox/Inbox.pm
+++ b/lib/PublicInbox/Inbox.pm
@@ -9,6 +9,26 @@ use Scalar::Util qw(weaken isweak);
use PublicInbox::Git;
use PublicInbox::MID qw(mid2path);
+my $weakt;
+eval {
+ $weakt = 'disabled';
+ require PublicInbox::EvCleanup;
+ $weakt = undef; # OK if we get here
+};
+
+my $WEAKEN = {}; # string(inbox) -> inbox
+sub weaken_task () {
+ $weakt = undef;
+ _weaken_fields($_) for values %$WEAKEN;
+ $WEAKEN = {};
+}
+
+sub _weaken_later ($) {
+ my ($self) = @_;
+ $weakt ||= PublicInbox::EvCleanup::later(*weaken_task);
+ $WEAKEN->{"$self"} = $self;
+}
+
sub new {
my ($class, $opts) = @_;
my $v = $opts->{address} ||= 'public-inbox@example.com';
@@ -17,7 +37,7 @@ sub new {
bless $opts, $class;
}
-sub weaken_all {
+sub _weaken_fields {
my ($self) = @_;
foreach my $f (qw(git mm search)) {
isweak($self->{$f}) or weaken($self->{$f});
@@ -26,17 +46,26 @@ sub weaken_all {
sub git {
my ($self) = @_;
- $self->{git} ||= eval { PublicInbox::Git->new($self->{mainrepo}) };
+ $self->{git} ||= eval {
+ _weaken_later($self);
+ PublicInbox::Git->new($self->{mainrepo});
+ };
}
sub mm {
my ($self) = @_;
- $self->{mm} ||= eval { PublicInbox::Msgmap->new($self->{mainrepo}) };
+ $self->{mm} ||= eval {
+ _weaken_later($self);
+ PublicInbox::Msgmap->new($self->{mainrepo});
+ };
}
sub search {
my ($self) = @_;
- $self->{search} ||= eval { PublicInbox::Search->new($self->{mainrepo}) };
+ $self->{search} ||= eval {
+ _weaken_later($self);
+ PublicInbox::Search->new($self->{mainrepo});
+ };
}
sub try_cat {
diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm
index 56d0838..0b30d43 100644
--- a/lib/PublicInbox/NNTP.pm
+++ b/lib/PublicInbox/NNTP.pm
@@ -38,8 +38,6 @@ my %DISABLED; # = map { $_ => 1 } qw(xover list_overview_fmt newnews xhdr);
my $EXPMAP; # fd -> [ idle_time, $self ]
my $expt;
our $EXPTIME = 180; # 3 minutes
-my $WEAKEN = {}; # string(nntpd) -> nntpd
-my $weakt;
my $nextt;
my $nextq = [];
@@ -64,16 +62,6 @@ sub update_idle_time ($) {
defined $fd and $EXPMAP->{$fd} = [ now(), $self ];
}
-# reduce FD pressure by closing some "git cat-file --batch" processes
-# and unused FDs for msgmap and Xapian indices
-sub weaken_groups () {
- $weakt = undef;
- foreach my $nntpd (values %$WEAKEN) {
- $_->weaken_all foreach (@{$nntpd->{grouplist}});
- }
- $WEAKEN = {};
-}
-
sub expire_old () {
my $now = now();
my $exp = $EXPTIME;
@@ -92,15 +80,11 @@ sub expire_old () {
$EXPMAP = \%new;
if ($nr) {
$expt = PublicInbox::EvCleanup::later(*expire_old);
- weaken_groups();
} else {
$expt = undef;
# noop to kick outselves out of the loop ASAP so descriptors
# really get closed
PublicInbox::EvCleanup::asap(sub {});
-
- # grace period for reaping resources
- $weakt ||= PublicInbox::EvCleanup::later(*weaken_groups);
}
}
@@ -113,7 +97,6 @@ sub new ($$$) {
$self->{rbuf} = '';
$self->watch_read(1);
update_idle_time($self);
- $WEAKEN->{"$nntpd"} = $nntpd;
$expt ||= PublicInbox::EvCleanup::later(*expire_old);
$self;
}
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index 5425308..5de5ffe 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -148,8 +148,6 @@ sub invalid_inbox {
if (defined $obj) {
$ctx->{git_dir} = $obj->{mainrepo};
$ctx->{git} = $obj->git;
- # for PublicInbox::HTTP::weaken_task:
- $ctx->{env}->{'pi-httpd.inbox'} = $obj;
$ctx->{-inbox} = $obj;
$ctx->{inbox} = $inbox;
return;
--
EW
^ permalink raw reply related [relevance 6%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2016-07-07 1:50 7% [PATCH 0/4] more tweaks and finalize WwwStream conversion Eric Wong
2016-07-07 1:50 6% ` [PATCH 3/4] inbox: cleanup and consolidate object weakening Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).