user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [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).