0001-Support-transporting-flags-in-the-elevel-argument-of.patch
text/x-patch
Filename: 0001-Support-transporting-flags-in-the-elevel-argument-of.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch 0001
Subject: Support transporting flags in the 'elevel' argument of ereport(). The reason is the wish to support avoiding the error to the client which was only possible using the COMERROR level - which is not a error but just a log message. The only supported flag till now is LOG_NO_CLIENT which does what COMERROR did for all error levels
| File | + | − |
|---|---|---|
| src/backend/utils/error/elog.c | 4 | 2 |
| src/include/utils/elog.h | 20 | 9 |
From 150b0bc845f7aab9629cc169a3a73f3338d6ab7f Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Sat, 13 Feb 2010 22:21:15 +0100
Subject: [PATCH 1/2] Support transporting flags in the 'elevel' argument of ereport(). The
reason is the wish to support avoiding the error to the client which
was only possible using the COMERROR level - which is not a error but
just a log message.
The only supported flag till now is LOG_NO_CLIENT which does what
COMERROR did for all error levels
---
src/backend/utils/error/elog.c | 6 ++++--
src/include/utils/elog.h | 29 ++++++++++++++++++++---------
2 files changed, 24 insertions(+), 11 deletions(-)
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index e321b99..5fc21b4 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -214,7 +214,8 @@ errstart(int elevel, const char *filename, int lineno,
bool output_to_server;
bool output_to_client = false;
int i;
-
+ int eflags = elevel & LOG_FLAG_MASK;
+ elevel = elevel & ~LOG_FLAG_MASK;
/*
* Check some cases in which we want to promote an error into a more
* severe error. None of this logic applies for non-error messages.
@@ -274,7 +275,7 @@ errstart(int elevel, const char *filename, int lineno,
output_to_server = (elevel >= log_min_messages);
/* Determine whether message is enabled for client output */
- if (whereToSendOutput == DestRemote && elevel != COMMERROR)
+ if (whereToSendOutput == DestRemote && !(eflags & LOG_NO_CLIENT))
{
/*
* client_min_messages is honored only after we complete the
@@ -333,6 +334,7 @@ errstart(int elevel, const char *filename, int lineno,
edata = &errordata[errordata_stack_depth];
MemSet(edata, 0, sizeof(ErrorData));
edata->elevel = elevel;
+ edata->eflags = eflags;
edata->output_to_server = output_to_server;
edata->output_to_client = output_to_client;
edata->filename = filename;
diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h
index 92641ba..1853e1d 100644
--- a/src/include/utils/elog.h
+++ b/src/include/utils/elog.h
@@ -16,6 +16,13 @@
#include <setjmp.h>
+#define LOG_FLAG_MASK ((~0)<<20)
+
+/* logging flags */
+#define LOG_NO_CLIENT (2<<30) /* Don't send to the client. Helpfull
+ * if it would confuse the client at
+ * that moment */
+
/* Error level codes */
#define DEBUG5 10 /* Debugging messages, in categories of
* decreasing detail. */
@@ -25,30 +32,33 @@
#define DEBUG1 14 /* used by GUC debug_* variables */
#define LOG 15 /* Server operational messages; sent only to
* server log by default. */
-#define COMMERROR 16 /* Client communication problems; same as LOG
+#define COMMERROR (LOG|LOG_NO_CLIENT)/* Client communication problems; same as LOG
* for server reporting, but never sent to
- * client. */
-#define INFO 17 /* Messages specifically requested by user (eg
+ * client. For backward compatibility this is
+ * is available without explicitly specifying
+ * LOG_NO_CLIENT.*/
+#define INFO 16 /* Messages specifically requested by user (eg
* VACUUM VERBOSE output); always sent to
* client regardless of client_min_messages,
* but by default not sent to server log. */
-#define NOTICE 18 /* Helpful messages to users about query
+#define NOTICE 17 /* Helpful messages to users about query
* operation; sent to client and server log by
* default. */
-#define WARNING 19 /* Warnings. NOTICE is for expected messages
+#define WARNING 18 /* Warnings. NOTICE is for expected messages
* like implicit sequence creation by SERIAL.
* WARNING is for unexpected messages. */
-#define ERROR 20 /* user error - abort transaction; return to
+#define ERROR 19 /* user error - abort transaction; return to
* known state */
/* Save ERROR value in PGERROR so it can be restored when Win32 includes
* modify it. We have to use a constant rather than ERROR because macros
* are expanded only when referenced outside macros.
*/
#ifdef WIN32
-#define PGERROR 20
+#define PGERROR 19
#endif
-#define FATAL 21 /* fatal error - abort process */
-#define PANIC 22 /* take down the other backends with me */
+#define FATAL 20 /* fatal error - abort process */
+#define PANIC 21 /* take down the other backends with me */
+
/* #define DEBUG DEBUG1 */ /* Backward compatibility with pre-7.3 */
@@ -291,6 +301,7 @@ extern PGDLLIMPORT sigjmp_buf *PG_exception_stack;
typedef struct ErrorData
{
int elevel; /* error level */
+ int eflags; /* error flags */
bool output_to_server; /* will report to server log? */
bool output_to_client; /* will report to client? */
bool show_funcname; /* true to force funcname inclusion */
--
1.7.3.rc1.5.g73aa2