Re: rflush() not working as documented?

2003-08-14 Thread Martin Wickman
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-modperlm=105968263417468w=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 
[htmlhead TITLE /headbody BODY/html]


And here is the code that generates this:

  sub handler {
  my $r = shift;

  $r-content_type('text/html');
  $r-print (htmlhead TITLE /head);
  $r-rflush();
  $r-print (bo);
  $r-rflush();
  $r-print (dy BODY);
  $r-rflush();
  $r-print (/html);
  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
[htmlfoo]
o bucket 2: TRANSIENT
[headbody]
o bucket 3: TRANSIENT
[ 
!-- sd]
o bucket 4: TRANSIENT
[sd --

[...]

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=apachemodulesID=771


Re: rflush() not working as documented?

2003-08-14 Thread Martin Wickman
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?

2003-08-14 Thread Martin Wickman
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?

2003-08-14 Thread Stas Bekman
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-modperlm=105968263417468w=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?

2003-08-14 Thread Stas Bekman
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?

2003-08-09 Thread Stas Bekman
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(foo);
$r-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(who);
$r-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: [foo][bar][who][ah]

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?

2003-08-04 Thread Martin Wickman


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 (htmlhead title /head); $r-rflush();
 $r-print (bo);$r-rflush();
 $r-print (dy body );  $r-rflush();
 $r-print (/html);
 $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
 
   Location /test/
 PerlResponseHandler MyApache::Cutter
 PerlOutputFilterHandler MyApache::DebugFilter
   /Location
 
 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:htmlhead title /headbody body /html: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


Re: rflush() not working as documented?

2003-08-04 Thread Geoffrey Young


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