From: Mike Rylander Date: Tue, 10 Jan 2017 20:30:18 +0000 (-0500) Subject: LP#1655449: Bundling/chunking limits for SubRquests X-Git-Tag: osrf_rel_2_5_0-alpha2~7 X-Git-Url: http://git.equinoxoli.org/?p=opensrf-equinox.git;a=commitdiff_plain;h=22e2c7729b6caf265b27ff14126fe5595e87cdca LP#1655449: Bundling/chunking limits for SubRquests We need to teach subrequests to inherit parent request bundling/chunking parameters so they don't cause overruns in dispatch mode. Signed-off-by: Mike Rylander Signed-off-by: Jason Stephenson --- diff --git a/src/perl/lib/OpenSRF/AppSession.pm b/src/perl/lib/OpenSRF/AppSession.pm index 158513b..36d56b0 100644 --- a/src/perl/lib/OpenSRF/AppSession.pm +++ b/src/perl/lib/OpenSRF/AppSession.pm @@ -1164,7 +1164,11 @@ sub new { threadTrace => 0, # needed for respond in RD mode max_chunk_count => 0, # needed for respond in RD mode max_chunk_size => 0, # needed for respond in RD mode - current_chunk => [], # needed for respond_complete in RD mode + max_bundle_size => 0, + current_bundle => [], # needed for respond_complete in RD mode + current_bundle_count=> 0, + current_bundle_size => 0, + max_bundle_count => 0, @_ }, $class); if ($self->session) { diff --git a/src/perl/lib/OpenSRF/Application.pm b/src/perl/lib/OpenSRF/Application.pm index 5d01cb5..5995f1c 100644 --- a/src/perl/lib/OpenSRF/Application.pm +++ b/src/perl/lib/OpenSRF/Application.pm @@ -572,14 +572,24 @@ sub method_lookup { $meth = $self->method_lookup($method,$proto,1); } - $meth->session($self->session) if $meth && ref($self); # Pass the caller's session + if ($meth && ref($self)) { + $meth->session($self->session); # Pass the caller's session + $meth->max_chunk_size($self->max_chunk_size); + $meth->max_bundle_size($self->max_bundle_size); + } + return $meth; } sub dispatch { my $self = shift; $log->debug("Creating a dispatching SubRequest object", DEBUG); - my $req = OpenSRF::AppSubrequest->new( session => $self->session, respond_directly => 1 ); + my $req = OpenSRF::AppSubrequest->new( + session => $self->session, + max_chunk_size => $self->max_chunk_size, + max_bundle_size => $self->max_bundle_size, + respond_directly => 1 + ); return $self->run($req,@_); } @@ -593,7 +603,11 @@ sub run { if ( !UNIVERSAL::isa($req, 'OpenSRF::AppRequest') ) { $log->debug("Creating a SubRequest object", DEBUG); unshift @params, $req; - $req = OpenSRF::AppSubrequest->new( session => $self->session ); + $req = OpenSRF::AppSubrequest->new( + session => $self->session, + max_chunk_size => $self->max_chunk_size, + max_bundle_size => $self->max_bundle_size + ); } else { $log->debug("This is a top level request", DEBUG); }