支持idle_in_transaction_session_timeout

This commit is contained in:
xue_meng_en
2022-08-23 20:53:33 +08:00
parent e94d589c4f
commit 2bcb702760
13 changed files with 234 additions and 14 deletions

View File

@ -117,6 +117,10 @@ static void knl_u_attr_init(knl_session_attr* attr)
attr->attr_common.client_min_messages = NOTICE;
attr->attr_common.SessionTimeout = sessionDefaultTimeout;
attr->attr_common.SessionTimeoutCount = 0;
#ifndef ENABLE_MULTIPLE_NODES
attr->attr_common.IdleInTransactionSessionTimeout = 0;
attr->attr_common.IdleInTransactionSessionTimeoutCount = 0;
#endif
attr->attr_common.enable_full_encryption = false;
attr->attr_storage.sync_method = DEFAULT_SYNC_METHOD;
attr->attr_sql.under_explain = false;
@ -1487,6 +1491,12 @@ knl_session_context* create_session_context(MemoryContext parent, uint64 id)
* non-threadpool/fake session will direct call ReadCommand and enable alarm by sig timer
* */
(void)enable_session_sig_alarm(u_sess->attr.attr_common.SessionTimeout * secondToMilliSecond);
#ifndef ENABLE_MULTIPLE_NODES
if (u_sess->attr.attr_common.IdleInTransactionSessionTimeout > 0 &&
(IsAbortedTransactionBlockState() || IsTransactionOrTransactionBlock())) {
(void)enable_idle_in_transaction_session_sig_alarm(u_sess->attr.attr_common.IdleInTransactionSessionTimeout * 1000);
}
#endif
}
// Switch to context group, in case knl_u_executor_init will alloc memory on CurrentMemoryContext.