VMware {code} Community
John_David_Robi
Contributor
Contributor

VI Perl Soap Timeouts

Due to some inefficiencies with our backend database, my VirtualCenter service currently returns performance data very slowly. I've increased the timeout to handle that on the VC client side of things, but the problem is crippling my efforts at a VI Perl- based performance gathering system. The error I'm seeing is this:

SOAP request error: 500 SSL read timeout:

at /usr/share/perl/5.8/VMware/VIM2Stub.pm line 180

SoapClient::request('SoapClient=HASH(0x981bf10)', 'QueryPerf', '<_this type="PerformanceManager">PerfMgr<...') called at /usr/share/perl/5.8/VMware/VIM2Stub.pm line 26568

VimService::QueryPerf('VimService=HASH(0x98084f4)', '_this', 'ManagedObjectReference=HASH(0x996e4f4)', 'querySpec', 'PerfQuerySpec=HASH(0xb8c8314)') called at /usr/share/perl/5.8/VMware/VIM2Runtime.pm line 532

ViewBase::invoke('PerformanceManager=HASH(0xb8c8014)', 'QueryPerf', 'querySpec', 'PerfQuerySpec=HASH(0xb8c8314)') called at /usr/share/perl/5.8/VMware/VIM2Runtime.pm line 1800

PerformanceManagerOperations::QueryPerf('PerformanceManager=HASH(0xb8c8014)', 'querySpec', 'PerfQuerySpec=HASH(0xb8c8314)') called at ./env_readout.pl line 136

Is there any way to cause VI Perl to expose the underlying SOAP objects, so I can manipulate the timeout myself, or (even better) is the timeout exposed somewhere by the API, and I just missed it?

0 Kudos
2 Replies
ssurana
VMware Employee
VMware Employee

Hi John,

1) No, we cannot retrieve the underlying SOAP objects.

2) Subroutine request in VIM2Runtime.pm is responsible for creating the SOAP request xml and send it to server over HTTP.

3) So there are two timeouts involved HTTPConnection timeout and SOAP request timeout.

4) Your error is regarding the SOAP timeout request.

As VIM2Runtime constructs the SOAP xml itself, there is no placeholder to specify the timeout limit.

On the other hand if it uses the packages like SOAP::LITE then its much easier to provide the placeholder to specify the timeout limit.

Like

my $soap = SOAP::Lite->proxy('http://endpoint.server/', timeout => 5);

Hope the above information helps you.

~ Sidharth

John_David_Robi
Contributor
Contributor

Thanks, ssurana. I suspected as much, but I was hoping I had missed something. Guess it's time to start digging into the code.

0 Kudos