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: 1
Message:
idle in txn query cancellation
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 | 0 | 0 |
| src/include/utils/elog.h | 0 | 0 |
From 04d726519fbc85ea13bb7919d65400c89e0df031 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 | 25 ++++++++++++++++---------
2 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index daa88a3..3ef07ad 100644
*** a/src/backend/utils/error/elog.c
--- b/src/backend/utils/error/elog.c
*************** errstart(int elevel, const char *filenam
*** 213,219 ****
bool output_to_server;
bool output_to_client = false;
int i;
!
/*
* 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.
--- 213,220 ----
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.
*************** errstart(int elevel, const char *filenam
*** 273,279 ****
output_to_server = (elevel >= log_min_messages);
/* Determine whether message is enabled for client output */
! if (whereToSendOutput == DestRemote && elevel != COMMERROR)
{
/*
* client_min_messages is honored only after we complete the
--- 274,280 ----
output_to_server = (elevel >= log_min_messages);
/* Determine whether message is enabled for client output */
! if (whereToSendOutput == DestRemote && !(eflags & LOG_NO_CLIENT))
{
/*
* client_min_messages is honored only after we complete the
*************** errstart(int elevel, const char *filenam
*** 332,337 ****
--- 333,339 ----
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 2ec3dd3..f3b4439 100644
*** a/src/include/utils/elog.h
--- b/src/include/utils/elog.h
***************
*** 16,21 ****
--- 16,24 ----
#include <setjmp.h>
+ #define LOG_FLAG_MASK ((~0)<<20)
+ #define LOG_NO_CLIENT (2<<30)
+
/* Error level codes */
#define DEBUG5 10 /* Debugging messages, in categories of
* decreasing detail. */
***************
*** 25,54 ****
#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
* for server reporting, but never sent to
! * client. */
! #define INFO 17 /* 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
* operation; sent to client and server log by
* default. */
! #define WARNING 19 /* 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
* 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
#endif
! #define FATAL 21 /* fatal error - abort process */
! #define PANIC 22 /* take down the other backends with me */
/* #define DEBUG DEBUG1 */ /* Backward compatibility with pre-7.3 */
--- 28,60 ----
#define DEBUG1 14 /* used by GUC debug_* variables */
#define LOG 15 /* Server operational messages; sent only to
* server log by default. */
! #define COMMERROR (LOG|LOG_NO_CLIENT)/* Client communication problems; same as LOG
* for server reporting, but never sent to
! * 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 17 /* Helpful messages to users about query
* operation; sent to client and server log by
* default. */
! #define WARNING 18 /* Warnings. NOTICE is for expected messages
* like implicit sequence creation by SERIAL.
* WARNING is for unexpected messages. */
! #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 19
#endif
! #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 */
*************** extern PGDLLIMPORT sigjmp_buf *PG_except
*** 291,296 ****
--- 297,303 ----
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.6.5.12.gd65df24