<div dir="ltr"><div>Hi,</div><div><br></div>Our app handles a lot of uploads, often quite large uploads.    As we know, uploads (and any non-parsed body) gets written to temp files via HTTP::Body.<div><br></div><div>Now, Catalyst::Request also writes every body to a temp file (via Stream::Buffered).   So, depending on the body size, can take up to twice the space in temp files as the content length.</div><div><br></div><div>If we are not going to use psgi.input and just use Catalyst&#39;s (HTTP::Body&#39;s) temp files could we make the creation of psgi.input optional?</div><div><br></div><div>I have a few other concerns about the current code.   </div><div><br></div><div>prepare_body in Catalyst::Request does not check the return code when it writes to the psgi.input file.   HTTP::Body also fails to check return codes when it writes.   This means if the partition where temp files are created fills then Catalyst request will ignore this and continue as if there&#39;s no problem.   I trust the risk here is recognized.</div><div><br></div><div>I think the fix in Catalyst::Request is pretty simple by checking return values:</div><div><br></div><div><div><font face="monospace, monospace">    # Check for definedness as you could read &#39;0&#39;</font></div><div><font face="monospace, monospace">    while ( defined ( my $chunk = $self-&gt;read() ) ) {</font></div><div><font face="monospace, monospace">        $self-&gt;prepare_body_chunk($chunk);</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">        next unless $stream_buffer;</font></div><div><font face="monospace, monospace">        $stream_buffer-&gt;print($chunk)</font></div><div><font face="monospace, monospace">            || die sprintf &quot;Failed to write %d bytes to psgi.input file: $!&quot;, length( $chunk );</font></div><div><font face="monospace, monospace">    }</font></div></div><div><div><br></div><div>HTTP::Body needs similar changes.</div><div><br></div><div><div><br></div><div>See any problem with making the psgi.input file optional?   And any reason not to throw an exception when writing to the temp file fails?</div><div><br></div><div>BTW -- Plack::Handler::Apache2 sets psgi.input to the Apache request object $r -- it would be handy to preserve this object for later use.</div><div><br></div><div><div><br></div>-- <br><div class="gmail_signature">Bill Moseley<br><a href="mailto:moseley@hank.org" target="_blank">moseley@hank.org</a></div>
</div></div></div></div>