dev-db/pgagent: new revision adding more upstream patches.

There's a bug you can hit with pgAgent after an upgrade (like from
postgres-9.5 to postgres-9.6) that causes your jobs to get stuck in
a "Running" state. Since pgAgent thinks the job is running, it won't
start the job again the next time it's scheduled, even though the
job has actually completed successfully. To fix that issue, we apply
four new patches that add recent improvements from upstream:

  * Fix a crash from DBconn:GetLastError().
  * Save the stderr output in the jobstep log.
  * Add timestamps to the pgAgent logs.
  * And finally, fix the "job succeeded" check.

The intermediate patches are not strictly necessary, but they are
helpful, and most importantly, let us apply the upstream patches
cleanly without having to re-roll them.

Package-Manager: Portage-2.3.6, Repoman-2.3.1
This commit is contained in:
Michael Orlitzky
2017-08-19 10:24:40 -04:00
parent f28d2aff16
commit bb260f1b28
5 changed files with 683 additions and 1 deletions

View File

@@ -0,0 +1,535 @@
From 2eef6cc4928c611cecdca3c1daecb60568deca4e Mon Sep 17 00:00:00 2001
From: Sanket Mehta <sanket.mehta@enterprisedb.com>
Date: Fri, 17 Jul 2015 09:07:09 +0100
Subject: [PATCH] Add log timestamps and a --version option per Josh Berkus.
Update copyright notices while passing.
---
CMakeLists.txt | 8 ++++----
LICENSE | 2 +-
cmake/MakeExt.cmake | 2 +-
connection.cpp | 2 +-
include/connection.h | 2 +-
include/job.h | 2 +-
include/misc.h | 3 ++-
include/pgAgent.h | 2 +-
job.cpp | 2 +-
misc.cpp | 14 +++++++++++++-
pgAgent.cpp | 2 +-
pgAgent.rc | 14 +++++++-------
pgaevent/CMakeLists.txt | 2 +-
pgaevent/pgaevent.c | 2 +-
pgaevent/pgaevent.def | 2 +-
pgaevent/pgamsgevent.h | 2 +-
pgaevent/pgamsgevent.rc | 14 +++++++-------
precomp.cpp | 2 +-
sql/pgagent--unpackaged--3.4.sql | 2 +-
sql/pgagent.sql | 2 +-
sql/pgagent_upgrade.sql | 2 +-
unix.cpp | 16 +++++++++++-----
win32.cpp | 5 ++++-
23 files changed, 64 insertions(+), 42 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ab02fea..c8bfa4a 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
#######################################################################
#
# pgAgent - PostgreSQL tools
-# Copyright (C) 2002 - 2014, The pgAdmin Development Team
+# Copyright (C) 2002 - 2015, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
# CMakeLists.txt - CMake build configuration
@@ -27,7 +27,6 @@ SET(CMAKE_FIND_LIBRARY_PREFIXES "")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib")
SET(STATIC_BUILD YES CACHE BOOL "Statically link the executable?")
-
################################################################################
# Apple stuff
################################################################################
@@ -61,12 +60,12 @@ PROJECT(pgagent)
# in pgagent.sql and upgrade_pgagent.sql if the major version number is
# changed. The full version number also needs to be included in pgAgent.rc and
# pgaevent/pgamsgevent.rc at present.
-SET(VERSION 3.4.0)
+SET(VERSION "3.4.1")
# CPack stuff
SET(CPACK_PACKAGE_VERSION_MAJOR 3)
SET(CPACK_PACKAGE_VERSION_MINOR 4)
-SET(CPACK_PACKAGE_VERSION_PATCH 0)
+SET(CPACK_PACKAGE_VERSION_PATCH 1)
SET(CPACK_PACKAGE_NAME "pgAgent")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "pgAgent is a job scheduling engine for PostgreSQL")
SET(CPACK_PACKAGE_VENDOR "the pgAdmin Development Team")
@@ -79,6 +78,7 @@ SET(CPACK_SOURCE_GENERATOR TGZ)
SET(CPACK_SOURCE_IGNORE_FILES "\\\\.DS_Store;/CVS/;/\\\\.svn/;\\\\.swp$;\\\\.#;/#;.*~;cscope.*")
ADD_DEFINITIONS(-DPGAGENT_VERSION_MAJOR=${CPACK_PACKAGE_VERSION_MAJOR})
+ADD_DEFINITIONS(-DPGAGENT_VERSION="${VERSION}")
# This must come after we set the CPACK variables!!
INCLUDE(CPack)
diff --git a/LICENSE b/LICENSE
index 3b2638a..c460d6f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
pgAgent
-Copyright (c) 2002 - 2014, The pgAdmin Development Team
+Copyright (c) 2002 - 2015, The pgAdmin Development Team
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written agreement is
diff --git a/cmake/MakeExt.cmake b/cmake/MakeExt.cmake
index 5777c97..ae30e30 100644
--- a/cmake/MakeExt.cmake
+++ b/cmake/MakeExt.cmake
@@ -1,7 +1,7 @@
#######################################################################
#
# pgAgent - PostgreSQL tools
-# Copyright (C) 2002 - 2014, The pgAdmin Development Team
+# Copyright (C) 2002 - 2015, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
# MakeExt,cmake - Create the PG Extension
diff --git a/connection.cpp b/connection.cpp
index f2213bd..25432bb 100644
--- a/connection.cpp
+++ b/connection.cpp
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// connection.cpp - database connection
diff --git a/include/connection.h b/include/connection.h
index a201450..064067c 100644
--- a/include/connection.h
+++ b/include/connection.h
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// connection.h - database connection
diff --git a/include/job.h b/include/job.h
index e511852..abc33d4 100644
--- a/include/job.h
+++ b/include/job.h
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// job.h - agent job
diff --git a/include/misc.h b/include/misc.h
index 14b4edc..59847d1 100644
--- a/include/misc.h
+++ b/include/misc.h
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// misc.h - misc functions
@@ -18,6 +18,7 @@ void WaitAWhile(const bool waitLong = false);
void setOptions(int argc, char **argv, const wxString &executable);
wxString getArg(int &argc, char **&argv);
wxString NumToStr(const long l);
+void printVersion();
#endif // MISC_H
diff --git a/include/pgAgent.h b/include/pgAgent.h
index 6ef4944..059e0ca 100644
--- a/include/pgAgent.h
+++ b/include/pgAgent.h
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgAgent.h - main include
diff --git a/job.cpp b/job.cpp
index c4b39ce..f3eaa03 100644
--- a/job.cpp
+++ b/job.cpp
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014 The pgAdmin Development Team
+// Copyright (C) 2002 - 2015 The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// job.cpp - pgAgent job
diff --git a/misc.cpp b/misc.cpp
index dfd56a0..2252d83 100644
--- a/misc.cpp
+++ b/misc.cpp
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014 The pgAdmin Development Team
+// Copyright (C) 2002 - 2015 The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// misc.cpp - misc functions
@@ -16,6 +16,8 @@
#include <unistd.h>
#endif
+#define APPVERSION_STR wxT(PGAGENT_VERSION)
+
// In unix.c or win32.c
void usage(const wxString &executable);
@@ -42,6 +44,11 @@ wxString getArg(int &argc, char **&argv)
return s;
}
+void printVersion()
+{
+ wxPrintf(_("PostgreSQL Scheduling Agent\n"));
+ wxPrintf(_("Version: %s\n"), APPVERSION_STR);
+}
void setOptions(int argc, char **argv, const wxString &executable)
{
@@ -72,6 +79,11 @@ void setOptions(int argc, char **argv, const wxString &executable)
minLogLevel = val;
break;
}
+ case 'v':
+ {
+ printVersion();
+ exit (0);
+ }
#ifndef __WXMSW__
case 'f':
{
diff --git a/pgAgent.cpp b/pgAgent.cpp
index 5ed43fb..9238fa1 100644
--- a/pgAgent.cpp
+++ b/pgAgent.cpp
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgAgent.cpp - pgAgent main entry
diff --git a/pgAgent.rc b/pgAgent.rc
index 3c51bfa..c4169e1 100644
--- a/pgAgent.rc
+++ b/pgAgent.rc
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgAgent.rc - win32 Resources
@@ -16,8 +16,8 @@ aaaPGAGENT ICON DISCARDABLE "include/pgAgent.ico"
VS_VERSION_INFO VERSIONINFO
-FILEVERSION 3,4,0,0
-PRODUCTVERSION 3,4,0,0
+FILEVERSION 3,4,1,0
+PRODUCTVERSION 3,4,1,0
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
BEGIN
@@ -25,15 +25,15 @@ BEGIN
BEGIN
BLOCK "040904E4"
BEGIN
- VALUE "FileVersion", "3.4.0", "\0"
- VALUE "File Version", "3.4.0", "\0"
+ VALUE "FileVersion", "3.4.1", "\0"
+ VALUE "File Version", "3.4.1", "\0"
VALUE "FileDescription", "pgAgent - PostgreSQL Scheduling Agent", "\0"
- VALUE "LegalCopyright", "\251 2002 - 2012, The pgAdmin Development Team", "\0"
+ VALUE "LegalCopyright", "\251 2002 - 2015, The pgAdmin Development Team", "\0"
VALUE "LegalTrademarks", "This software is released under the PostgreSQL Licence.", "\0"
VALUE "InternalName", "pgAgent", "\0"
VALUE "OriginalFilename","pgagent.exe", "\0"
VALUE "ProductName", "pgAgent", "\0"
- VALUE "ProductVersion", "3.4.0", "\0"
+ VALUE "ProductVersion", "3.4.1", "\0"
END
END
BLOCK "VarFileInfo"
diff --git a/pgaevent/CMakeLists.txt b/pgaevent/CMakeLists.txt
index 10478c3..2fd6192 100644
--- a/pgaevent/CMakeLists.txt
+++ b/pgaevent/CMakeLists.txt
@@ -1,7 +1,7 @@
#######################################################################
#
# pgAgent - PostgreSQL tools
-# Copyright (C) 2002 - 2014, The pgAdmin Development Team
+# Copyright (C) 2002 - 2015, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
# pgaevent/CMakeLists.txt - CMake build configuration
diff --git a/pgaevent/pgaevent.c b/pgaevent/pgaevent.c
index a66ed42..c9fac75 100644
--- a/pgaevent/pgaevent.c
+++ b/pgaevent/pgaevent.c
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgaevent.c - win32 message format dll
diff --git a/pgaevent/pgaevent.def b/pgaevent/pgaevent.def
index c9e222d..34e03c1 100644
--- a/pgaevent/pgaevent.def
+++ b/pgaevent/pgaevent.def
@@ -2,7 +2,7 @@
; //
; // pgAgent - PostgreSQL Tools
; //
-; // Copyright (C) 2002 - 2014 The pgAdmin Development Team
+; // Copyright (C) 2002 - 2015 The pgAdmin Development Team
; // This software is released under the PostgreSQL Licence
; //
; // pgaeventdef - pgaevent.dll exports
diff --git a/pgaevent/pgamsgevent.h b/pgaevent/pgamsgevent.h
index b8e11a5..f589d60 100644
--- a/pgaevent/pgamsgevent.h
+++ b/pgaevent/pgamsgevent.h
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgamsgevent.h - Message id declarations
diff --git a/pgaevent/pgamsgevent.rc b/pgaevent/pgamsgevent.rc
index 79e77aa..510ab65 100644
--- a/pgaevent/pgamsgevent.rc
+++ b/pgaevent/pgamsgevent.rc
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgaevent.rc - win32 Resources
@@ -19,8 +19,8 @@ aaaPGAEVENT ICON DISCARDABLE "../include/pgagent.ico"
VS_VERSION_INFO VERSIONINFO
-FILEVERSION 3,4,0,0
-PRODUCTVERSION 3,4,0,0
+FILEVERSION 3,4,1,0
+PRODUCTVERSION 3,4,1,0
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
BEGIN
@@ -28,15 +28,15 @@ BEGIN
BEGIN
BLOCK "040904E4"
BEGIN
- VALUE "FileVersion", "3.4.0", "\0"
- VALUE "File Version", "3.4.0", "\0"
+ VALUE "FileVersion", "3.4.1", "\0"
+ VALUE "File Version", "3.4.1", "\0"
VALUE "FileDescription", "pgaevent - pgAgent Event Log Message DLL", "\0"
- VALUE "LegalCopyright", "\251 2002 - 2014, The pgAdmin Development Team", "\0"
+ VALUE "LegalCopyright", "\251 2002 - 2015, The pgAdmin Development Team", "\0"
VALUE "LegalTrademarks", "This software is released under the PostgreSQL Licence.", "\0"
VALUE "InternalName", "pgaevent", "\0"
VALUE "OriginalFilename","pgaevent.dll", "\0"
VALUE "ProductName", "pgAgent", "\0"
- VALUE "ProductVersion", "3.4.0", "\0"
+ VALUE "ProductVersion", "3.4.1", "\0"
END
END
BLOCK "VarFileInfo"
diff --git a/precomp.cpp b/precomp.cpp
index 02c969f..56766bb 100644
--- a/precomp.cpp
+++ b/precomp.cpp
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// precomp.cpp - pgAgent precompiled headers
diff --git a/sql/pgagent--unpackaged--3.4.sql b/sql/pgagent--unpackaged--3.4.sql
index 536640e..f5ffc63 100644
--- a/sql/pgagent--unpackaged--3.4.sql
+++ b/sql/pgagent--unpackaged--3.4.sql
@@ -1,7 +1,7 @@
/*
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014 The pgAdmin Development Team
+// Copyright (C) 2002 - 2015 The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgagent--unpackaged--3.4.sql - Convert pgAgent existing tables and functions to an extension
diff --git a/sql/pgagent.sql b/sql/pgagent.sql
index 3708adf..1118833 100644
--- a/sql/pgagent.sql
+++ b/sql/pgagent.sql
@@ -1,7 +1,7 @@
/*
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014 The pgAdmin Development Team
+// Copyright (C) 2002 - 2015 The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgagent.sql - pgAgent tables and functions
diff --git a/sql/pgagent_upgrade.sql b/sql/pgagent_upgrade.sql
index ae0d995..c256c93 100644
--- a/sql/pgagent_upgrade.sql
+++ b/sql/pgagent_upgrade.sql
@@ -1,7 +1,7 @@
/*
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014 The pgAdmin Development Team
+// Copyright (C) 2002 - 2015 The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgagent_upgrade.sql - Upgrade pgAgent tables and functions
diff --git a/unix.cpp b/unix.cpp
index 34ad0f6..e206408 100644
--- a/unix.cpp
+++ b/unix.cpp
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// unix.cpp - pgAgent unix specific functions
@@ -17,14 +17,17 @@
#include <wx/filename.h>
#include <wx/ffile.h>
#include <fcntl.h>
+void printVersion();
void usage(const wxString &executable)
{
wxFileName *fn = new wxFileName(executable);
+ printVersion();
wxPrintf(_("Usage:\n"));
wxPrintf(fn->GetName() + _(" [options] <connect-string>\n"));
wxPrintf(_("options:\n"));
+ wxPrintf(_("-v (display version info and then exit)\n"));
wxPrintf(_("-f run in the foreground (do not detach from the terminal)\n"));
wxPrintf(_("-t <poll time interval in seconds (default 10)>\n"));
wxPrintf(_("-r <retry period after connection abort in seconds (>=10, default 30)>\n"));
@@ -50,22 +53,25 @@ void LogMessage(wxString msg, int level)
return;
}
+ wxDateTime logTime = wxDateTime::Now();
+ wxString logTimeString = logTime.Format() + wxT(" : ");
+
switch (level)
{
case LOG_DEBUG:
if (minLogLevel >= LOG_DEBUG)
- file.Write(_("DEBUG: ") + msg + wxT("\n"));
+ file.Write(logTimeString + _("DEBUG: ") + msg + wxT("\n"));
break;
case LOG_WARNING:
if (minLogLevel >= LOG_WARNING)
- file.Write(_("WARNING: ") + msg + wxT("\n"));
+ file.Write(logTimeString + _("WARNING: ") + msg + wxT("\n"));
break;
case LOG_ERROR:
- file.Write(_("ERROR: ") + msg + wxT("\n"));
+ file.Write(logTimeString + _("ERROR: ") + msg + wxT("\n"));
exit(1);
break;
case LOG_STARTUP:
- file.Write(_("WARNING: ") + msg + wxT("\n"));
+ file.Write(logTimeString + _("WARNING: ") + msg + wxT("\n"));
break;
}
diff --git a/win32.cpp b/win32.cpp
index aa5d5d7..624ae77 100644
--- a/win32.cpp
+++ b/win32.cpp
@@ -2,7 +2,7 @@
//
// pgAgent - PostgreSQL Tools
//
-// Copyright (C) 2002 - 2014 The pgAdmin Development Team
+// Copyright (C) 2002 - 2015 The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// win32.cpp - pgAgent win32 specific functions
@@ -36,6 +36,7 @@ static HANDLE serviceSync;
static HANDLE eventHandle;
bool stopService();
+void printVersion();
// This will be called from MainLoop, if pgagent is initialized properly
void Initialized()
@@ -435,12 +436,14 @@ bool removeService(const wxString &serviceName)
void usage(const wxString &executable)
{
wxFileName *fn = new wxFileName(executable);
+ printVersion();
wxPrintf(_("Usage:\n"));
wxPrintf(fn->GetName() + _(" REMOVE <serviceName>\n"));
wxPrintf(fn->GetName() + _(" INSTALL <serviceName> [options] <connect-string>\n"));
wxPrintf(fn->GetName() + _(" DEBUG [options] <connect-string>\n"));
wxPrintf(_("options:\n"));
+ wxPrintf(_("-v (display version info and then exit)\n"));
wxPrintf(_("-u <user or DOMAIN\\user>\n"));
wxPrintf(_("-p <password>\n"));
wxPrintf(_("-d <displayname>\n"));

View File

@@ -0,0 +1,32 @@
From f9bf1ccb27ebcfce00e7a6d467bc0e1b5ee9555e Mon Sep 17 00:00:00 2001
From: Ashesh Vashi <ashesh.vashi@enterprisedb.com>
Date: Wed, 1 Apr 2015 15:24:11 +0530
Subject: [PATCH] Fixed a bug in DBconn::GetLastError() function.
pgAgent was crashing, while removing the trailing new-lines from the
empty error message string (Reported by: Thomas Krennwallner)
---
connection.cpp | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/connection.cpp b/connection.cpp
index b7623e6..f2213bd 100644
--- a/connection.cpp
+++ b/connection.cpp
@@ -313,15 +313,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);
}
///////////////////////////////////////////////////////7

View File

@@ -0,0 +1,30 @@
From 01b72d867cc2bdbaff1765499a6395f7bc94e2be Mon Sep 17 00:00:00 2001
From: Sanket Mehta <sanket.mehta@enterprisedb.com>
Date: Tue, 1 Dec 2015 11:34:32 +0530
Subject: [PATCH] Set 'succeeded' flag to true/false by checking for the step
failure everytime (it gets executed).
These was an issue with the current implementation.
Once the 'succeeded' flag is set to true, the following batch step
execution does not stop executiong of following steps on failure, even
we have set 'onerror' to 'f' for that step.
---
job.cpp | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/job.cpp b/job.cpp
index f3eaa03..9864f57 100644
--- a/job.cpp
+++ b/job.cpp
@@ -307,9 +307,7 @@ int Job::Execute()
// set success status for batch runs, be pessimistic by default
LogMessage(wxString::Format(_("Script return code: %d"), rc), LOG_DEBUG);
- if (rc == 0)
- succeeded = true;
-
+ succeeded = ((rc == 0) ? true : false);
// If output is empty then either script did not return any output
// or script threw some error into stderr.
// Check script threw some error into stderr

View File

@@ -0,0 +1,79 @@
From 5d2e0d3500a8e144215cdfe10b52cf7415b58046 Mon Sep 17 00:00:00 2001
From: Ashesh Vashi <ashesh.vashi@enterprisedb.com>
Date: Mon, 25 May 2015 12:37:42 +0530
Subject: [PATCH] Save the standarad error too along with the standard output
in the jobstep output for the batch jobs.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[Worked on by: Mehmet Emin KARAKAŞ, Akshay Joshi]
[Reviewed and improvised by: Sanket Joshi, Ashesh Vashi]
---
job.cpp | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/job.cpp b/job.cpp
index 00334ab..c4b39ce 100644
--- a/job.cpp
+++ b/job.cpp
@@ -186,8 +186,10 @@ int Job::Execute()
#ifdef __WIN32__
wxString filename = dirname + wxT("\\") + jobid + wxT("_") + stepid + wxT(".bat");
+ wxString errorFile = dirname + wxT("\\") + jobid + wxT("_") + stepid + wxT("_error.txt");
#else
wxString filename = dirname + wxT("/") + jobid + wxT("_") + stepid + wxT(".scr");
+ wxString errorFile = dirname + wxT("/") + jobid + wxT("_") + stepid + wxT("_error.txt");
#endif
// Write the script
@@ -233,6 +235,10 @@ int Job::Execute()
file->Close();
LogMessage(wxString::Format(_("Executing script file: %s"), filename.c_str()), LOG_DEBUG);
+ // freopen function is used to redirect output of stream (stderr in our case)
+ // into the specified file.
+ FILE *fpError = freopen(errorFile.mb_str(), "w", stderr);
+
// Execute the file and capture the output
#ifdef __WIN32__
// The Windows way
@@ -304,6 +310,37 @@ int Job::Execute()
if (rc == 0)
succeeded = true;
+ // If output is empty then either script did not return any output
+ // or script threw some error into stderr.
+ // Check script threw some error into stderr
+ if (fpError)
+ {
+ //fclose(fpError);
+ FILE* fpErr = fopen(errorFile.mb_str(), "r");
+ if (fpErr)
+ {
+ char buffer[4098];
+ wxString errorMsg = wxEmptyString;
+ while (!feof(fpErr))
+ {
+ if (fgets(buffer, 4096, fpErr) != NULL)
+ errorMsg += wxString(buffer, wxConvLibc);
+ }
+
+ if (errorMsg != wxEmptyString) {
+ wxString errmsg =
+ wxString::Format(
+ _("Script Error: \n%s\n"),
+ errorMsg.c_str());
+ LogMessage(errmsg, LOG_WARNING);
+ output += wxT("\n") + errmsg;
+ }
+
+ fclose(fpErr);
+ }
+ wxRemoveFile(errorFile);
+ }
+
// Delete the file/directory. If we fail, don't overwrite the script output in the log, just throw warnings.
if (!wxRemoveFile(filename))
{

View File

@@ -24,7 +24,13 @@ DEPEND="${RDEPEND}"
S="${WORKDIR}/${MY_PN}-${PV}-Source"
PATCHES=( "${FILESDIR}/postgres-10-build-fix.patch" )
PATCHES=(
"${FILESDIR}/fix-dbconn-getlasterror-crash.patch"
"${FILESDIR}/save-stderr-jobstep-output.patch"
"${FILESDIR}/add-log-timestamps.patch"
"${FILESDIR}/fix-job-success-test.patch"
"${FILESDIR}/postgres-10-build-fix.patch"
)
src_prepare() {
default