On Thu, Mar 26, 2015 at 6:19 PM, Thomas Krennwallner <
tk+pg...@postsubmeta.net> wrote:

> Hi!
>
> Running pgagent 3.4.0 on Debian jessie with an SQL jobstep crashes the
> worker thread with the error message
>
> Caught unhandled unknown exception; terminating
>
> Both job and jobstep status then remain as 'r' (running) until the
> pgagent process quits. After restarting pgagent, which cleans up the
> job status and sets it to 'd' (aborted), the job containing the SQL
> jobstep is free to run again, but the next run will end up in the same
> deadlock situation.
>
> I have tracked down the problem to DBconn::GetLastError(), which gets
> called after each SQL jobstep execution in Job::Execute(): there,
> DBconn::GetLastError() throws an exception whenever the last error
> message is empty.
>
> The attached patch fixes this problem by adding missing bounds checks
> to DBconn::GetLastError().
>
Thanks for the patch.
But - I was thinking about another fix for the same.
I used the wxString::Trim(trimRight=true) function in order to remove the
white-spaces from the right side.


Dave,


















*diff --git a/connection.cpp b/connection.cppindex 6103c00..ccbb5c7
100644--- a/connection.cpp+++ b/connection.cpp@@ -314,14 +314,7 @@ int
DBconn::ExecuteVoid(const wxString &query) wxString
DBconn::GetLastError() {        // Return the last error message, minus any
trailing line ends-       if (lastError.substr(lastError.length() - 2, 2)
== wxT("\r\n")) // DOS-               return lastError.substr(0,
lastError.length() - 2);-       else if
(lastError.substr(lastError.length() - 1, 1) == wxT("\n")) //
Unix-               return lastError.substr(0, lastError.length() -
1);-       else if (lastError.substr(lastError.length() - 1, 1) ==
wxT("\r")) // Mac-               return lastError.substr(0,
lastError.length() - 1);-       else-               return
lastError;+       return lastError.Trim(true); }*

Do you think - above diff make sense?
If yes - I will commit the code.

--

Thanks & Regards,

Ashesh Vashi
EnterpriseDB INDIA: Enterprise PostgreSQL Company
<http://www.enterprisedb.com>


*http://www.linkedin.com/in/asheshvashi*
<http://www.linkedin.com/in/asheshvashi>

>
> Here is a log of pgagent with an SQL jobstep:
>
> $ pgagent -l 2 -f hostaddr=127.0.0.1 port=5432 dbname=pgdb user=pgdb
> DEBUG: Creating primary connection
> DEBUG: Connection Information:
> DEBUG:      user         : pgdb
> DEBUG:      port         : 5432
> DEBUG:      host         : 127.0.0.1
> DEBUG:      dbname       : pgdb
> DEBUG:      password     :
> DEBUG:      conn timeout : 0
> DEBUG: Connection Information:
> DEBUG:      user         : pgdb
> DEBUG:      port         : 5432
> DEBUG:      host         : 127.0.0.1
> DEBUG:      dbname       : pgdb
> DEBUG:      password     :
> DEBUG:      conn timeout : 0
> DEBUG: Creating DB connection: user=pgdb port=5432 hostaddr=127.0.0.1
> dbname=pgdb
> DEBUG: Database sanity check
> DEBUG: Clearing zombies
> DEBUG: Checking for jobs to run
> DEBUG: Sleeping...
> DEBUG: Clearing inactive connections
> DEBUG: Connection stats: total - 1, free - 0, deleted - 0
> DEBUG: Checking for jobs to run
> DEBUG: Sleeping...
> [...]
> DEBUG: Clearing inactive connections
> DEBUG: Connection stats: total - 1, free - 0, deleted - 0
> DEBUG: Checking for jobs to run
> DEBUG: Sleeping...
> DEBUG: Connection stats: total - 1, free - 0, deleted - 0
> DEBUG: Checking for jobs to run
> DEBUG: Creating job thread for job 5
> DEBUG: Creating DB connection: user=pgdb port=5432 hostaddr=127.0.0.1
> dbname=pgdb
> DEBUG: Allocating new connection to database pgdb
> DEBUG: Starting job: 5
> DEBUG: Sleeping...
> DEBUG: Creating DB connection: user=pgdb port=5432 hostaddr=127.0.0.1
> dbname=pgdb dbname=pgdb
> DEBUG: Allocating new connection to database pgdb
> DEBUG: Executing SQL step 40 (part of job 5)
> *** Caught unhandled unknown exception; terminating
> DEBUG: Destroying job thread for job 5
> DEBUG: Checking for jobs to run
> DEBUG: Sleeping...
> DEBUG: Clearing inactive connections
> DEBUG: Connection stats: total - 3, free - 0, deleted - 0
> DEBUG: Checking for jobs to run
> DEBUG: Sleeping...
> DEBUG: Clearing inactive connections
> DEBUG: Connection stats: total - 3, free - 0, deleted - 0
> DEBUG: Checking for jobs to run
> DEBUG: Sleeping...
> [...]
>
>
> --
> Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgadmin-hackers
>
>

Reply via email to