Re: rflush() not working as documented?
Martin Wickman wrote: I tried the latest CVS (modperl-2.0_20030810101543) and my code now works as expected, ie rflush() splits correctly into brigades. The t/api/rflush.t works as well btw. Excellent! Is it any different from your code? Your test-code is essentially the same as my code. I guess my modperl version had a broken rflush() implementation. Excellent. Thanks Martin! __ Stas BekmanJAm_pH --> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: rflush() not working as documented?
Martin Wickman wrote: Stas Bekman wrote: Geoffrey Young wrote: Martin Wickman wrote: Martin Wickman wrote: According to docs[1], $r->rflush() should create a new brigade with data. It does not. I've seen this also, but was never able to isolate a cause. rflush() works fine, it's possible that the issue with the streaming filter or some other upstream filter that ignores the flush buckets. I doubt that, no other external filter is in use. Are you using the latest mod_perl 2.0? Nope. I am using 1.99_07. (Btw, that information _was_ included in my report, but you trimmed it away:) oops, sorry. Can you try with the latest cvs? This is with: Apache/2.0.47 (Debian GNU/Linux) mod_perl/1.99_07-dev Perl/v5.8.0 It's much appreciated when bug reports are written using the following guidelines: http://perl.apache.org/docs/2.0/user/help/help.html#Reporting_Problems Pardon me, but I do believe I supplied enough and accurate information -- including relevant, trimmed code snippets and excerpts from apache logs in my report. Except from the fact that I did not build mod_perl myself, I can't really see what I missed to include? Your particular problem report was fine, what you have missed is the output of t/REPORT which tells us things about your environment. I can't see it here http://marc.theaimsgroup.com/?l=apache-modperl&m=105968263417468&w=2 Martin, please check the mod_perl 2.0 test suite, it has plenty of examples where it used exactly for the reason you've described. Ok, thanks I'll check it out. I'm guessing that my mod_perl is too old, I like to stay with the prebuilt packages (debian) if possible. But if needed, I'll build the latest version and test it. Just thought that someone would know, thats all. Sure, we just need to know your build env so we can try to reproduce the problem with a similar one. In any case, have you tried using the snooping filter I was talking about in my previous reply? It shows you exactly what's going on inside. __ Stas BekmanJAm_pH --> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: rflush() not working as documented?
On Thu, Aug 07, 2003 at 04:46:51PM -0700, Stas Bekman wrote: > > Please try the latest mp2 cvs, I've added a new test t/api/rflush.t, > it tests rflush explicitly (even though it's already used for > exactly this purpose in several other tests). [...] > does it work for you? I tried the latest CVS (modperl-2.0_20030810101543) and my code now works as expected, ie rflush() splits correctly into brigades. The t/api/rflush.t works as well btw. Excellent! > Is it any different from your code? Your test-code is essentially the same as my code. I guess my modperl version had a broken rflush() implementation. /Thank you!
Re: rflush() not working as documented?
Stas Bekman wrote: >Geoffrey Young wrote: >>Martin Wickman wrote: >>>Martin Wickman wrote: >>> According to docs[1], $r->rflush() should create a new brigade with data. It does not. >> >>I've seen this also, but was never able to isolate a cause. > > rflush() works fine, it's possible that the issue with the streaming > filter or some other upstream filter that ignores the flush buckets. I doubt that, no other external filter is in use. > Are you using the latest mod_perl 2.0? Nope. I am using 1.99_07. (Btw, that information _was_ included in my report, but you trimmed it away:) >>>This is with: >>> Apache/2.0.47 (Debian GNU/Linux) mod_perl/1.99_07-dev Perl/v5.8.0 > It's much appreciated when bug reports are written using the > following guidelines: > http://perl.apache.org/docs/2.0/user/help/help.html#Reporting_Problems Pardon me, but I do believe I supplied enough and accurate information -- including relevant, trimmed code snippets and excerpts from apache logs in my report. Except from the fact that I did not build mod_perl myself, I can't really see what I missed to include? > Martin, please check the mod_perl 2.0 test suite, it has plenty of examples > where it used exactly for the reason you've described. Ok, thanks I'll check it out. I'm guessing that my mod_perl is too old, I like to stay with the prebuilt packages (debian) if possible. But if needed, I'll build the latest version and test it. Just thought that someone would know, thats all.
Re: rflush() not working as documented?
On Wed, Aug 06, 2003 at 07:33:49AM -0700, Stas Bekman wrote: > Martin Wickman wrote: [...] > oops, sorry. Can you try with the latest cvs? Not at the moment. But I'll try in a few days. > Your particular problem report was fine, what you have missed is the output > of t/REPORT which tells us things about your environment. I can't see it > here > http://marc.theaimsgroup.com/?l=apache-modperl&m=105968263417468&w=2 Sorry, my deb package dont have the t/ stuff. [...] > In any case, have you tried using the snooping filter I was talking about > in my previous reply? It shows you exactly what's going on inside. It confirms my problems. Here is output: >>> connection output filter o bucket 1: FLUSH [] >>> connection output filter o bucket 1: FLUSH [] >>> connection output filter o bucket 1: FLUSH [] >>> connection output filter o bucket 1: TRANSIENT [ TITLE BODY] And here is the code that generates this: sub handler { my $r = shift; $r->content_type('text/html'); $r->print (" TITLE "); $r->rflush(); $r->print ("rflush(); $r->print ("dy> BODY"); $r->rflush(); $r->print (""); return Apache::OK; } 1; For the record, I am able to cut up a stream nicely using mod_cutup [1]. This results in something like: >>> connection output filter o bucket 1: TRANSIENT [foo<] o bucket 2: TRANSIENT [head> [...] Which at least proves that the snoop filter is working as expected :-) Anyway, I'll try with the latest mod_perl version as soon as time allows and post my results later. [1] http://projects.standblue.net/markive/message.moto?list=apachemodules&ID=771
Re: rflush() not working as documented?
Martin Wickman wrote: Please try the latest mp2 cvs, I've added a new test t/api/rflush.t, it tests rflush explicitly (even though it's already used for exactly this purpose in several other tests). It does exactly what your code does: sub response { my $r = shift; # just to make sure that print() won't flush, or we would get the # count wrong local $| = 0; $r->content_type('text/plain'); $r->print("rflush; # this sends the data in the buffer + flush bucket $r->print("bar>"); $r->rflush; # this sends the data in the buffer + flush bucket $r->print("rflush; # this sends the data in the buffer + flush bucket $r->print("ah>"); Apache::OK; } Then an output filter that brakets the data: sub braket { my $filter = shift; my $data = ''; while ($filter->read(my $buffer, 1024)) { $data .= $buffer; } $filter->print("[$data]") if $data; return Apache::OK; } the response body is: [][] does it work for you? Is it any different from your code? __ Stas BekmanJAm_pH --> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: rflush() not working as documented?
Geoffrey Young wrote: Martin Wickman wrote: Just checking that this did not get lost on the way. Anyone care to give me a hint? On Thu, Jul 31, 2003 at 10:17:06PM +0200, Martin Wickman wrote: Hello According to docs[1], $r->rflush() should create a new brigade with data. It does not. I've seen this also, but was never able to isolate a cause. rflush() works fine, it's possible that the issue with the streaming filter or some other upstream filter that ignores the flush buckets. Are you using the latest mod_perl 2.0? It's much appreciated when bug reports are written using the following guidelines: http://perl.apache.org/docs/2.0/user/help/help.html#Reporting_Problems Martin, please check the mod_perl 2.0 test suite, it has plenty of examples where it used exactly for the reason you've described. t/filter/TestFilter/out_bbs_ctx.pm t/filter/TestFilter/out_str_ctx.pm t/filter/TestFilter/out_str_declined.pm t/filter/TestFilter/out_str_remove.pm If you can break any of these tests, that would be useful. Otherwise, to debug things use the snooping filter http://perl.apache.org/docs/2.0/user/handlers/filters.html#All_in_One_Filter I'm planning to release it on CPAN soonish. __ Stas BekmanJAm_pH --> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: rflush() not working as documented?
Martin Wickman wrote: Just checking that this did not get lost on the way. Anyone care to give me a hint? On Thu, Jul 31, 2003 at 10:17:06PM +0200, Martin Wickman wrote: Hello According to docs[1], $r->rflush() should create a new brigade with data. It does not. I've seen this also, but was never able to isolate a cause. It seems the docs and/or my understanding of this is in error. This is with: Apache/2.0.47 (Debian GNU/Linux) mod_perl/1.99_07-dev Perl/v5.8.0 And I am using the streaming filter api. [1] http://perl.apache.org/docs/2.0/user/handlers/filters.html#Multiple_Invocations_of_Filter_Handlers Long version below: -- I have tried to make my outputfilter clever enough so it can handle being called several times, with tags potentially split between several brigades. see the code and tests from http://www.modperlcookbook.org/~geoff/perl.com/Apache-Clean-2.0.tar.gz which should give you more ideas about how to code this (and how I tested long input values) the corresponding articles might help: http://www.perl.com/pub/a/2003/04/17/filters.html http://www.perl.com/pub/a/2003/05/22/testing.html I've been meaning to chat with stas about the rflush for a while now. perhaps we can prioritize it :) --Geoff
Re: rflush() not working as documented?
Just checking that this did not get lost on the way. Anyone care to give me a hint? On Thu, Jul 31, 2003 at 10:17:06PM +0200, Martin Wickman wrote: > Hello > > According to docs[1], $r->rflush() should create a new brigade with > data. It does not. > > It seems the docs and/or my understanding of this is in error. > > > This is with: > Apache/2.0.47 (Debian GNU/Linux) mod_perl/1.99_07-dev Perl/v5.8.0 > > And I am using the streaming filter api. > > [1] > http://perl.apache.org/docs/2.0/user/handlers/filters.html#Multiple_Invocations_of_Filter_Handlers > > > Long version below: > -- > > I have tried to make my outputfilter clever enough so it can handle > being called several times, with tags potentially split between > several brigades. > > Now I would like to test this somehow (ie, force mod_perl to call my > filter several times). I tried using $r->rflush(), but cannot get it > to work as I and the docs would expect. > > I tried creating a ResponseHandler which explicitly breaks some silly > html data into brigades: > > sub handler { > my $r = shift; > $r->content_type('text/html'); > $r->log_error ("Cutting"); > $r->print (" title "); $r->rflush(); > $r->print ("rflush(); > $r->print ("dy> body "); $r->rflush(); > $r->print (""); > $r->log_error ("Cutting: end"); > return Apache::OK; > } > > And then a simple 'DebugFilter' output filter which just prints each chunk: > > sub handler : FilterRequestHandler { > my $f = shift; > $f->r->log_error ("DebugFilter called"); > $f->print ("DebugFilter called\n"); > while ($f->read(my $buffer, 1024)) { > $f->print("CHUNK:$buffer:CHUNK\n"); > } > return Apache::OK; > } > > And httpd.conf > > > PerlResponseHandler MyApache::Cutter > PerlOutputFilterHandler MyApache::DebugFilter > > > When I run this, I see that DebugFilter gets called 4 times (3 > rflush's + 1 eos or something). But the strange thing is that only the > _last_ call contains data. That data is _everything_ nicely > concatenated and not splitted as I would guess. > > Here is actual output: > > $ wget --quiet -O - http://localhost/test/ >DebugFilter called >DebugFilter called >DebugFilter called >DebugFilter called >CHUNK: title body :CHUNK > > And the error_log: > > [Thu Jul 31 21:52:42 2003] [error] Cutting: start > [Thu Jul 31 21:52:42 2003] [error] DebugFilter called > [Thu Jul 31 21:52:42 2003] [error] DebugFilter called > [Thu Jul 31 21:52:42 2003] [error] DebugFilter called > [Thu Jul 31 21:52:42 2003] [error] Cutting: end > [Thu Jul 31 21:52:42 2003] [error] DebugFilter called