!4076 【代码同步】同步3.0.5版本,增加 pg_terminate_active_session_socket 函数

Merge pull request !4076 from zhangxubo/5.0-termsession
This commit is contained in:
opengauss_bot
2023-10-07 10:00:28 +00:00
committed by Gitee
26 changed files with 241 additions and 36 deletions

View File

@ -0,0 +1 @@
DROP FUNCTION IF EXISTS pg_catalog.pg_terminate_active_session_socket() cascade;

View File

@ -0,0 +1 @@
DROP FUNCTION IF EXISTS pg_catalog.pg_terminate_active_session_socket() cascade;

View File

@ -0,0 +1,5 @@
set local inplace_upgrade_next_system_object_oids = IUO_PROC, 3148;
CREATE OR REPLACE FUNCTION pg_catalog.pg_terminate_active_session_socket
(IN threadid BIGINT,
IN sessionid BIGINT)
RETURNS bool LANGUAGE INTERNAL NOT FENCED as 'pg_terminate_active_session_socket';

View File

@ -0,0 +1,5 @@
set local inplace_upgrade_next_system_object_oids = IUO_PROC, 3148;
CREATE OR REPLACE FUNCTION pg_catalog.pg_terminate_active_session_socket
(IN threadid BIGINT,
IN sessionid BIGINT)
RETURNS bool LANGUAGE INTERNAL NOT FENCED as 'pg_terminate_active_session_socket';

View File

@ -200,6 +200,7 @@ typedef struct knl_u_sig_context {
*/
volatile sig_atomic_t got_pool_reload;
volatile sig_atomic_t cp_PoolReload;
volatile sig_atomic_t got_terminate_sess_socket;
} knl_u_sig_context;
class AutonomousSession;

View File

@ -1425,6 +1425,7 @@ typedef struct knl_t_interrupt_context {
volatile bool ignoreBackendSignal; /* ignore signal for threadpool worker */
volatile bool ignoreSessionBackendSignal; /* ignore signal for u_session */
} knl_t_interrupt_context;
typedef int64 pg_time_t;

View File

@ -959,6 +959,7 @@ extern size_t mmap_threshold;
void HandlePoolerReload(void);
void HandleMemoryContextDump(void);
void HandleExecutorFlag(void);
void handle_terminate_active_sess_socket();
extern void start_xact_command(void);
extern void finish_xact_command(void);

View File

@ -114,13 +114,14 @@ extern VirtualTransactionId* GetCurrentVirtualXIDs(
extern VirtualTransactionId *GetConflictingVirtualXIDs(TransactionId limitXmin, Oid dbOid, XLogRecPtr lsn = 0,
CommitSeqNo limitXminCSN = InvalidCommitSeqNo,
TransactionId* xminArray = NULL);
extern ThreadId CancelVirtualTransaction(const VirtualTransactionId& vxid, ProcSignalReason sigmode);
extern ThreadId CancelVirtualTransaction(const VirtualTransactionId& vxid, ProcSignalReason sigmode,
int retry_count);
extern bool MinimumActiveBackends(int min);
extern int CountDBBackends(Oid database_oid);
extern int CountDBActiveBackends(Oid database_oid);
extern int CountSingleNodeActiveBackends(Oid databaseOid, Oid userOid);
extern void CancelDBBackends(Oid databaseid, ProcSignalReason sigmode, bool conflictPending);
extern void CancelDBBackends(Oid databaseid, ProcSignalReason sigmode, bool conflictPending, int retry_count);
extern void CancelSingleNodeBackends(Oid databaseOid, Oid userOid, ProcSignalReason sigmode, bool conflictPending);
extern int CountUserBackends(Oid roleid);
extern bool CountOtherDBBackends(Oid databaseId, int* nbackends, int* nprepared);

View File

@ -56,6 +56,9 @@ typedef enum {
PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK,
PROCSIG_EXECUTOR_FLAG,
/* close active session socket */
PROCSIG_COMM_CLOSE_ACTIVE_SESSION_SOCKET,
NUM_PROCSIGNALS /* Must be last! */
} ProcSignalReason;

View File

@ -30,8 +30,8 @@ void ResolveRecoveryConflictWithSnapshotOid(TransactionId latestRemovedXid, Oid
extern void ResolveRecoveryConflictWithTablespace(Oid tsid);
extern void ResolveRecoveryConflictWithDatabase(Oid dbid);
extern void ResolveRecoveryConflictWithBufferPin(void);
extern void SendRecoveryConflictWithBufferPin(ProcSignalReason reason);
extern void ResolveRecoveryConflictWithBufferPin(int retry_count);
extern void SendRecoveryConflictWithBufferPin(ProcSignalReason reason, int retry_count = 0);
extern void CheckRecoveryConflictDeadlock(void);
/*

View File

@ -46,9 +46,10 @@ public:
bool TryFeedWorker(ThreadPoolWorker* worker);
void AddNewSession(knl_session_context* session);
void WaitTask();
void DelSessionFromEpoll(knl_session_context* session);
void DelSessionFromEpoll(knl_session_context* session, bool sub_count);
void RemoveWorkerFromList(ThreadPoolWorker* worker);
void AddEpoll(knl_session_context* session);
void dispatch_socked_closed_session(knl_session_context* session);
void SendShutDown();
void ReaperAllSession();
void ShutDown() const;

View File

@ -59,6 +59,7 @@ public:
bool ValidDBoidAndUseroid(Oid dbOid, Oid userOid, knl_sess_control* ctrl);
void SigHupHandler();
void HandlePoolerReload();
int terminate_session_socket(ThreadId tid, uint64 session_id);
void CheckSessionTimeout();
#ifndef ENABLE_MULTIPLE_NODES
void CheckIdleInTransactionSessionTimeout();

View File

@ -682,6 +682,7 @@ extern Datum pg_cancel_session(PG_FUNCTION_ARGS);
extern Datum pg_cancel_invalid_query(PG_FUNCTION_ARGS);
extern Datum pg_terminate_backend(PG_FUNCTION_ARGS);
extern Datum pg_terminate_session(PG_FUNCTION_ARGS);
extern Datum pg_terminate_active_session_socket(PG_FUNCTION_ARGS);
extern Datum pg_reload_conf(PG_FUNCTION_ARGS);
extern Datum pg_tablespace_databases(PG_FUNCTION_ARGS);
extern Datum pg_tablespace_location(PG_FUNCTION_ARGS);