Documentation/technical/ds.txt | 4 ++--
lib/PublicInbox/GetlineBody.pm | 4 +---
lib/PublicInbox/GzipFilter.pm | 17 +++++++++++++----
lib/PublicInbox/HTTPD.pm | 5 ++---
lib/PublicInbox/Mbox.pm | 8 ++------
lib/PublicInbox/View.pm | 2 +-
lib/PublicInbox/WwwAtomStream.pm | 6 ++----
lib/PublicInbox/WwwStream.pm | 7 +++----
diff --git a/Documentation/technical/ds.txt b/Documentation/technical/ds.txt
index cbd06cfb4f0b18d1eca7cd4329ff8f1c52f2c875..a0793ca2337a04e956aaaf0bb5653c0561760a60 100644
--- a/Documentation/technical/ds.txt
+++ b/Documentation/technical/ds.txt
@@ -64,8 +64,8 @@
* ->requeue support. An optimization of the AddTimer(0, ...) idiom
for immediately dispatching code at the next event loop iteration.
public-inbox uses this for fairly generating large responses
- iteratively (see PublicInbox::NNTP::long_response or the use of
- ->getline callbacks for generating gigantic gzipped mboxes).
+ iteratively (see PublicInbox::NNTP::long_response or git_async_cat
+ for blob retrievals).
New features
diff --git a/lib/PublicInbox/GetlineBody.pm b/lib/PublicInbox/GetlineBody.pm
index 6becaaf5fc6af0b22d9bd3847e36257e83be8845..988bc63f41d59bac209931af65bc64d05deedd0b 100644
--- a/lib/PublicInbox/GetlineBody.pm
+++ b/lib/PublicInbox/GetlineBody.pm
@@ -5,9 +5,7 @@ # Wrap a pipe or file for PSGI streaming response bodies and calls the
# end callback when the object goes out-of-scope.
# This depends on rpipe being _blocking_ on getline.
#
-# public-inbox-httpd favors "getline" response bodies to take a
-# "pull"-based approach to feeding slow clients (as opposed to a
-# more common "push" model)
+# This is only used by generic PSGI servers and not public-inbox-httpd
package PublicInbox::GetlineBody;
use strict;
use warnings;
diff --git a/lib/PublicInbox/GzipFilter.pm b/lib/PublicInbox/GzipFilter.pm
index 6380f50e91f80ebd5e69d69b791cf36d5296e051..d72ad3c88da55779e9f2c953a63f61040a90c123 100644
--- a/lib/PublicInbox/GzipFilter.pm
+++ b/lib/PublicInbox/GzipFilter.pm
@@ -1,7 +1,16 @@
# Copyright (C) 2020 all contributors
# License: AGPL-3.0+
-
-# Qspawn filter
+#
+# In public-inbox <=1.5.0, public-inbox-httpd favored "getline"
+# response bodies to take a "pull"-based approach to feeding
+# slow clients (as opposed to a more common "push" model).
+#
+# In newer versions, public-inbox-httpd supports a backpressure-aware
+# pull/push model which also accounts for slow git blob storage.
+# {async_next} callbacks only run when the DS {wbuf} is drained
+# {async_eml} callbacks only run when a blob arrives from git.
+#
+# We continue to support getline+close for generic PSGI servers.
package PublicInbox::GzipFilter;
use strict;
use parent qw(Exporter);
@@ -14,12 +23,12 @@ our @EXPORT_OK = qw(gzf_maybe);
my %OPT = (-WindowBits => 15 + 16, -AppendOutput => 1);
my @GZIP_HDRS = qw(Vary Accept-Encoding Content-Encoding gzip);
-sub new { bless {}, shift }
+sub new { bless {}, shift } # qspawn filter
# for Qspawn if using $env->{'pi-httpd.async'}
sub attach {
my ($self, $http_out) = @_;
- $self->{http_out} = $http_out;
+ $self->{http_out} = $http_out; # PublicInbox::HTTP::{Chunked,Identity}
$self
}
diff --git a/lib/PublicInbox/HTTPD.pm b/lib/PublicInbox/HTTPD.pm
index 3319396996301b3262e89c0b074168ed3004e779..a9f55ff612e02d89e43a6af1bbab8667b51c6913 100644
--- a/lib/PublicInbox/HTTPD.pm
+++ b/lib/PublicInbox/HTTPD.pm
@@ -36,9 +36,8 @@ 'psgix.input.buffered' => Plack::Util::TRUE,
# XXX unstable API!, only GitHTTPBackend needs
# this to limit git-http-backend(1) parallelism.
- # The rest of our PSGI code is generic, relying
- # on "pull" model using "getline" to prevent
- # over-buffering.
+ # We also check for the truthiness of this to
+ # detect when to use git_async_cat for slow blobs
'pi-httpd.async' => \&pi_httpd_async
);
bless {
diff --git a/lib/PublicInbox/Mbox.pm b/lib/PublicInbox/Mbox.pm
index abdf43c93ac7c8059750a08f02d71495bd7fb53e..8726b9f641b248e9f581f568a4eba67fb91e3657 100644
--- a/lib/PublicInbox/Mbox.pm
+++ b/lib/PublicInbox/Mbox.pm
@@ -1,12 +1,8 @@
# Copyright (C) 2015-2020 all contributors
# License: AGPL-3.0+
-# Streaming (via getline) interface for formatting messages as an mboxrd.
-# Used by the PSGI web interface.
-#
-# public-inbox-httpd favors "getline" response bodies to take a
-# "pull"-based approach to feeding slow clients (as opposed to a
-# more common "push" model)
+# Streaming interface for mboxrd HTTP responses
+# See PublicInbox::GzipFilter for details.
package PublicInbox::Mbox;
use strict;
use parent 'PublicInbox::GzipFilter';
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 895e4f278dfff8b76e1a1e5c5949cf42352c7364..60dad6bac0ec96679c0fb81b91f4f4a6824b73e9 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -415,7 +415,7 @@ $ctx->{-queue} = [ map { (0, $_) } @$rootset ];
PublicInbox::WwwStream::aresponse($ctx, 200, \&stream_thread_i);
}
-# /$INBOX/$MESSAGE_ID/t/
+# /$INBOX/$MSGID/t/ and /$INBOX/$MSGID/T/
sub thread_html {
my ($ctx) = @_;
my $mid = $ctx->{mid};
diff --git a/lib/PublicInbox/WwwAtomStream.pm b/lib/PublicInbox/WwwAtomStream.pm
index 073df1dfaf6656b1e6739187f1e70d7a55d53cf4..3b5b133a5ec0b707b0b123a6d3e842138c8fa865 100644
--- a/lib/PublicInbox/WwwAtomStream.pm
+++ b/lib/PublicInbox/WwwAtomStream.pm
@@ -1,10 +1,8 @@
# Copyright (C) 2016-2020 all contributors
# License: AGPL-3.0+
#
-# Atom body stream for which yields getline+close methods
-# public-inbox-httpd favors "getline" response bodies to take a
-# "pull"-based approach to feeding slow clients (as opposed to a
-# more common "push" model)
+# Atom body stream for HTTP responses
+# See PublicInbox::GzipFilter for details.
package PublicInbox::WwwAtomStream;
use strict;
use parent 'PublicInbox::GzipFilter';
diff --git a/lib/PublicInbox/WwwStream.pm b/lib/PublicInbox/WwwStream.pm
index 7d257a191b0dda96558f969cc1b45d693f726942..23b03f0e8dc49ddf8780964a9f988fd41d99b6dc 100644
--- a/lib/PublicInbox/WwwStream.pm
+++ b/lib/PublicInbox/WwwStream.pm
@@ -1,11 +1,10 @@
# Copyright (C) 2016-2020 all contributors
# License: AGPL-3.0+
#
-# HTML body stream for which yields getline+close methods
+# HTML body stream for which yields getline+close methods for
+# generic PSGI servers and callbacks for public-inbox-httpd.
#
-# public-inbox-httpd favors "getline" response bodies to take a
-# "pull"-based approach to feeding slow clients (as opposed to a
-# more common "push" model)
+# See PublicInbox::GzipFilter parent class for more info.
package PublicInbox::WwwStream;
use strict;
use parent qw(Exporter PublicInbox::GzipFilter);