[dancer-users] Problem with web service using dancer2

Stefan Hornburg (Racke) racke at linuxia.de
Wed Feb 22 14:27:08 GMT 2017


On 02/22/2017 03:20 PM, Benjamins, John wrote:
> Hi,
> 
> Sorry, you are right, it is actually using Dancer2::Plugin::Pg.  Unfortunately I did not write this code, so I am not sure why it is checking $?, but that would seem to be a way to get unexpected results (which is what we are seeing!).  What is the correct way to check the result of something like:  $pg->selectAll( $query, $env_name )?  How do I know the error returned, if any?  Sorry if this is a basic question...
> 
> Thank you again!
> 
> John 

Hello John,

this plugin uses DBI behind the scenes - so if you have set RaiseError: 1, it will cause a 500 if the query fails.

So checking $? is itself causing unexpected results. If you want to see if a query crashes, you can wrap the
selectall call in an eval and check $@ - that makes more sense.

Regards
        Racke

> 
> -----Original Message-----
> From: dancer-users [mailto:dancer-users-bounces at dancer.pm] On Behalf Of Stefan Hornburg (Racke)
> Sent: Wednesday, February 22, 2017 7:40 AM
> To: dancer-users at dancer.pm
> Subject: Re: [dancer-users] Problem with web service using dancer2
> 
> On 02/22/2017 01:32 PM, Benjamins, John wrote:
>> Hi,
>>
>> The log has this for one of 20 threads with PID 37775:
>>
>> [37775] Read 366 bytes: "GET /v1/environments/testtest1/requests HTTP/1.1\r\nHost: apews:8096\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0\r\nAccept: application/json, text/javascript, */*; q=0.01\r\nAccept-Language: en-US,en;q=0.5\r\nAccept-Encoding: gzip, deflate\r\nReferer: http://apews:8080/ape_mgmt/\r\nOrigin: http://apews:8080\r\nConnection: keep-alive\r\n\r\n"
>> [EnvMgmt:37775] core @2017-02-22 02:17:09> looking for get 
>> /v1/environments/testtest1/requests in 
>> /usr/local/share/perl5/Dancer2/Core/App.pm l. 34 [EnvMgmt:37775] core 
>> @2017-02-22 02:17:09> Entering hook core.app.before_request in (eval 
>> 176) l. 1 [EnvMgmt:37775] info @2017-02-22 02:17:09> Sub: get_env_requests_status -- Query: select request_id AS requestnumber, client_code AS clientcode, request_status AS requeststatus, entity_id AS environment, request_url AS requesturl, request_method AS requestmethod, request_desc AS requestdesc, created_timestamp AS createdtime from entity_requests where entity_id = 'testtest1' in /home/dancer2/EnvMgmt/bin/../lib/EnvUtils.pm l. 240 [EnvMgmt:37775] info @2017-02-22 02:17:09> Sub: get_env_requests_status -- Exitcode: 72057594037927935 in /home/dancer2/EnvMgmt/bin/../lib/EnvUtils.pm l. 255 [EnvMgmt:37775] info @2017-02-22 02:17:09> ERROR: ARRAY(0x3e73f90) $VAR1 = [
>>           { .... (data removed for brevity) ... }
>>         ]; in /home/dancer2/EnvMgmt/bin/../lib/EnvUtils.pm l. 259 
>> [EnvMgmt:37775] core @2017-02-22 02:17:09> Entering hook 
>> core.app.after_request in (eval 176) l. 1 [37775] Wrote 285 bytes 
>> [37775] Wrote 5 bytes [37775] Request done [37775] Waiting on previous 
>> connection for keep-alive request...
>> [37775] Closing connection
>>
>> The code around l. 255  in EnvUtils.pm is:
>>
>> #
>> # Get requests status for selected environment.
>> #
>>
>> sub get_env_requests_status {
>>   my ($env_name) = @_;
>>
>>  # $env_name = $env_name . '%';
>>
>>   my $pg = Pg;
>>   my $debug = 'select request_id AS requestnumber,' .
>>               ' client_code AS clientcode,' .
>>               ' request_status AS requeststatus,' .
>>               ' entity_id AS environment,' .
>>               ' request_url AS requesturl,' .
>>               ' request_method AS requestmethod,' .
>>               ' request_desc AS requestdesc,' .
>>               ' created_timestamp AS createdtime' .
>>               ' from entity_requests' .
>>               ' where entity_id = \'' . $env_name . '\'';
>>   info "Sub: get_env_requests_status -- Query: $debug";
>>
>>   my $query = 'select request_id AS requestnumber,' .
>>               '       client_code AS clientcode,' .
>>               '       request_status AS requeststatus,' .
>>               '       entity_id AS environment,' .
>>               '       request_url AS requesturl,' .
>>               '       request_method AS requestmethod,' .
>>               '       request_desc AS requestdesc,' .
>>               '       created_timestamp AS createdtime' .
>>               '  from entity_requests' .
>>               ' where entity_id = ?';
>>   my $result = $pg->selectAll( $query, $env_name );
>>   my $exitcode = $? >> 8;
>>
>>   info "Sub: get_env_requests_status -- Exitcode: $exitcode";
>>
>>   if ($exitcode) {
>>     my $str = sprintf("%s", Dumper($result));
>>     info "ERROR: $result $str";
>>     return 372;  # Error: Cannot select the request status for selected env.
>>   }
>>
>>   return @{$result};
>> };
>>
>> And we are using Data::Dumper to print the $result of the query.
>>
>> Thank you!
>>
>> John
> 
> Hello John,
> 
> I thought you are using DBI ... but what kind of module is Pg?
> 
> At any rate, it looks odd to me to query the exit code when you don't run an external command.
> 
> Also I would use q{} or qq{} instead of appending lines with the dot operator.
> 
> Regards
>           Racke
> 
>>
>> -----Original Message-----
>> From: dancer-users [mailto:dancer-users-bounces at dancer.pm] On Behalf 
>> Of Stefan Hornburg (Racke)
>> Sent: Wednesday, February 22, 2017 7:03 AM
>> To: dancer-users at dancer.pm
>> Subject: Re: [dancer-users] Problem with web service using dancer2
>>
>> On 02/22/2017 12:56 PM, Benjamins, John wrote:
>>> Hi,
>>>
>>>  
>>>
>>> We are using Dancer2 (version is 0.203001) to provide a web service, and this has been deployed in a Docker container. 
>>> It is using Postgres as a database backend and perl DBI.  We are 
>>> having an issue were the service starts to return error
>>> 500 from database queries, even though it is returning what appears 
>>> to be valid data.  Any suggestions on where we should start looking?
>>> Restarting the pod running the web service fixes the issue for a while, but after a day or so of activity, the issue comes back.
>>>
>>>  
>>>
>>> Please let me know if there is any additional information I can provide that would help describe the problem better.
>>>
>>>  
>>>
>>> Thanks,
>>>
>>
>> Hello,
>>
>> what does Dancer report in the log file about the reason of the 500 error?
>>
>> Regards
>>           Racke
>>
>>>  
>>>
>>>  
>>>
>>>  
>>>
>>> This message is marked *Public*
>>>
>>> ---------------------------------------------------------------------
>>> -
>>> --------------------------------------------------
>>> Please consider the environment before printing this email and any attachments.
>>>
>>> This e-mail and any attachments are intended only for the individual 
>>> or company to which it is addressed and may contain information which is privileged, confidential and prohibited from disclosure or unauthorized use under applicable law.
>>> If you are not the intended recipient of this e-mail, you are hereby 
>>> notified that any use, dissemination, or copying of this e-mail or 
>>> the information contained in this e-mail is strictly prohibited by the sender. If you have received this transmission in error, please return the material received to the sender and delete all copies from your system.
>>>
>>>
>>>
>>> _______________________________________________
>>> dancer-users mailing list
>>> dancer-users at dancer.pm
>>> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>>>
>>
>>
>> --
>> Ecommerce and Linux consulting + Perl and web application programming.
>> Debian and Sympa administration.
>> _______________________________________________
>> dancer-users mailing list
>> dancer-users at dancer.pm
>> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>>
>> This message is marked Public
>>
>>
>> Please consider the environment before printing this email and any attachments.
>>
>> This e-mail and any attachments are intended only for the individual or company to which it is addressed and may contain information which is privileged, confidential and prohibited from disclosure or unauthorized use under applicable law. If you are not the intended recipient of this e-mail, you are hereby notified that any use, dissemination, or copying of this e-mail or the information contained in this e-mail is strictly prohibited by the sender. If you have received this transmission in error, please return the material received to the sender and delete all copies from your system.
>> _______________________________________________
>> dancer-users mailing list
>> dancer-users at dancer.pm
>> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>>
> 
> 
> --
> Ecommerce and Linux consulting + Perl and web application programming.
> Debian and Sympa administration.
> _______________________________________________
> dancer-users mailing list
> dancer-users at dancer.pm
> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
> 
> This message is marked Public
> 
> 
> Please consider the environment before printing this email and any attachments.
> 
> This e-mail and any attachments are intended only for the individual or company to which it is addressed and may contain information which is privileged, confidential and prohibited from disclosure or unauthorized use under applicable law. If you are not the intended recipient of this e-mail, you are hereby notified that any use, dissemination, or copying of this e-mail or the information contained in this e-mail is strictly prohibited by the sender. If you have received this transmission in error, please return the material received to the sender and delete all copies from your system.
> _______________________________________________
> dancer-users mailing list
> dancer-users at dancer.pm
> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
> 


-- 
Ecommerce and Linux consulting + Perl and web application programming.
Debian and Sympa administration.


More information about the dancer-users mailing list