From e71d790a92f497e5bc983c4ba970168129fbcdd3 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Tue, 10 Jan 2017 15:30:18 -0500 Subject: [PATCH] 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 --- src/perl/lib/OpenSRF/AppSession.pm | 6 +++++- src/perl/lib/OpenSRF/Application.pm | 20 +++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) 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); } -- 2.43.2