Propsed pgagent patch: pgAgent reports failure upon success - For Review

From: "Martin French" <Martin(dot)French(at)romaxtech(dot)com>
To: pgadmin-hackers(at)postgresql(dot)org
Cc: dpage(at)pgadmin(dot)org
Subject: Propsed pgagent patch: pgAgent reports failure upon success - For Review
Date: 2012-07-16 13:46:50
Message-ID: OF1A71C687.E0A5A19F-ON80257A3D.004B2F8F-80257A3D.004BB29F@LocalDomain
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

<html><body><p><tt><font size="2">Hi, </font></tt><br><br><tt><font size="2">I have attempted a patch for an issue where pgAgent incorrectly reports failure on a plain SQL job. Please see below.</font></tt><br><br><tt><font size="2">Feedback/comments welcome.</font></tt><br><br><tt><font size="2">Thanks</font></tt><br><br><tt><font size="2">Martin French.</font></tt><br><br><br><tt><font size="2">diff --git a/connection.cpp b/connection.cpp<br>index 5e10078..6103c00 100644<br>--- a/connection.cpp<br>+++ b/connection.cpp<br>@@ -336,6 +336,7 @@ DBresult::DBresult(DBconn *conn, const wxString &amp;query)<br> if (result)<br> {<br> int rc = PQresultStatus(result);<br>+ conn-&gt;SetLastResult(rc);<br> if (rc == PGRES_TUPLES_OK)<br> maxRows = PQntuples(result);<br> else if (rc != PGRES_COMMAND_OK)<br>diff --git a/include/connection.h b/include/connection.h<br>index 04087db..3cd1c0d 100644<br>--- a/include/connection.h<br>+++ b/include/connection.h<br>@@ -51,7 +51,33 @@ public:<br> {<br> return conn != 0;<br> }<br>-<br>+ &nbsp; &nbsp; &nbsp; &nbsp;bool LastCommandOk()<br>+ &nbsp; &nbsp; &nbsp; &nbsp;{<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return IsCommandOk((ExecStatusType)lastResult);<br>+ &nbsp; &nbsp; &nbsp; &nbsp;}<br>+ &nbsp; &nbsp; &nbsp; &nbsp;bool IsCommandOk(ExecStatusType ret)<br>+ &nbsp; &nbsp; &nbsp; &nbsp;{<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;switch (ret)<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case PGRES_COMMAND_OK:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case PGRES_TUPLES_OK:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case PGRES_COPY_OUT:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case PGRES_COPY_IN:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case PGRES_COPY_BOTH:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return true;<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;default:<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return false;<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;};<br>+ &nbsp; &nbsp; &nbsp; &nbsp;}<br>+ &nbsp; &nbsp; &nbsp; &nbsp;void SetLastResult(int res)<br>+ &nbsp; &nbsp; &nbsp; &nbsp;{<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lastResult = res;<br>+ &nbsp; &nbsp; &nbsp; &nbsp;}<br>+ &nbsp; &nbsp; &nbsp; &nbsp;int GetLastResult()<br>+ &nbsp; &nbsp; &nbsp; &nbsp;{<br>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return lastResult;<br>+ &nbsp; &nbsp; &nbsp; &nbsp;}<br>+ <br> DBresult *Execute(const wxString &amp;query);<br> wxString ExecuteScalar(const wxString &amp;query);<br> int ExecuteVoid(const wxString &amp;query);<br>@@ -70,7 +96,7 @@ protected:<br> PGconn *conn;<br> DBconn *next, *prev;<br> bool inUse;<br>-<br>+ int lastResult;<br> friend class DBresult;<br> <br> };<br>diff --git a/job.cpp b/job.cpp<br>index 9a5bb08..ba270be 100644<br>--- a/job.cpp<br>+++ b/job.cpp<br>@@ -80,6 +80,7 @@ Job::~Job()<br> int Job::Execute()<br> {<br> int rc = 0;<br>+ bool succeeded = false;<br> DBresult *steps = threadConn-&gt;Execute(<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wxT(&quot;SELECT * &quot;)<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wxT(&quot; &nbsp;FROM pgagent.pga_jobstep &quot;)<br>@@ -138,13 +139,14 @@ int Job::Execute()<br> {<br> LogMessage(wxString::Format(_(&quot;Executing SQL step %s (part of job %s)&quot;), stepid.c_str(), jobid.c_str()), LOG_DEBUG);<br> rc = stepConn-&gt;ExecuteVoid(steps-&gt;GetString(wxT(&quot;jstcode&quot;)));<br>+ succeeded = stepConn-&gt;LastCommandOk();<br> output = stepConn-&gt;GetLastError();<br> stepConn-&gt;Return();<br> }<br> else<br> {<br> output = _(&quot;Couldn't get a connection to the database!&quot;);<br>- rc = -1;<br>+ succeeded = false;<br> }<br> <br> <br>@@ -292,6 +294,9 @@ int Job::Execute()<br> rc = WEXITSTATUS(rc);<br> else<br> rc = -1;<br>+ // set success status for batch runs, be pessimistic bt default<br>+ if (rc == 0)<br>+ succeeded = true;<br> #endif<br> <br> // Delete the file/directory. If we fail, don't overwrite the script output in the log, just throw warnings.<br>@@ -319,7 +324,7 @@ int Job::Execute()<br> }<br> <br> wxString stepstatus;<br>- if (rc == 0)<br>+ if (succeeded)<br> stepstatus = wxT(&quot;s&quot;);<br> else<br> stepstatus = steps-&gt;GetString(wxT(&quot;jstonerror&quot;));<br></font></tt><font face="sans-serif">=============================================

Romax Technology Limited
Rutherford House
Nottingham Science & Technology Park
Nottingham,
NG7 2PZ
England

Telephone numbers:
+44 (0)115 951 88 00 (main)

For other office locations see:
http://www.romaxtech.com/Contact
=================================
===============
E-mail: info(at)romaxtech(dot)com
Website: www.romaxtech.com
=================================

================
Confidentiality Statement
This transmission is for the addressee only and contains information that is confidential and privileged.
Unless you are the named addressee, or authorised to receive it on behalf of the addressee
you may not copy or use it, or disclose it to anyone else.
If you have received this transmission in error please delete from your system and contact the sender. Thank you for your cooperation.
=================================================</font>
</body></html>

Attachment Content-Type Size
unknown_filename text/html 7.9 KB

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Dave Page 2012-07-16 14:52:45 Re: Propsed pgagent patch: pgAgent reports failure upon success - For Review
Previous Message Akshay Joshi 2012-07-16 10:03:50 Fixed pgAdmin3 folder hierarchy