diff --git a/src/gausskernel/process/postmaster/postmaster.cpp b/src/gausskernel/process/postmaster/postmaster.cpp index 6a733dc5edfbdbcdb31011c130b0fdd09757d1f5..a2dd35d9ec53f5fcb447c4b835cc1fcb78eaf4c5 100644 --- a/src/gausskernel/process/postmaster/postmaster.cpp +++ b/src/gausskernel/process/postmaster/postmaster.cpp @@ -395,6 +395,7 @@ static void getInstallationPaths(const char* argv0); static void checkDataDir(void); static void CheckGUCConflicts(void); static void CheckPgLogDisk(void); +static void CheckLogDir(void); static Port* ConnCreateToRecvGssock(pollfd* ufds, int idx, int* nSockets); static Port* ConnCreate(int serverFd, int idx); static void reset_shared(int port); @@ -2386,6 +2387,8 @@ int PostmasterMain(int argc, char* argv[]) CheckPgLogDisk(); } + CheckLogDir(); + /* And switch working directory into it */ ChangeToDataDir(); @@ -3388,6 +3391,38 @@ static void checkDataDir(void) FreeFile(fp); } +static void CheckLogDir(void) +{ + if (!g_instance.attr.attr_storage.dss_attr.ss_enable_dss) { + return; + } + + DIR* dir = NULL; + errno_t rc; + struct stat statBuf; + char log_path[MAXPGPATH] = {0}; + + /* assign gs_log to sys_log_path, use it as alarm directory */ + bool isAbsolute = is_absolute_path(u_sess->attr.attr_common.Log_directory); + if (isAbsolute) { + rc = strncpy_s(log_path, MAXPGPATH, u_sess->attr.attr_common.Log_directory, + strlen(u_sess->attr.attr_common.Log_directory)); + securec_check(rc, "\0", "\0"); + } else { + rc = snprintf_s(log_path, MAXPGPATH, MAXPGPATH - 1, "%s/pg_log", + g_instance.attr.attr_common.data_directory); + securec_check_ss(rc, "\0", "\0"); + } + + if ((dir = opendir(log_path)) == NULL) { + if (errno == ENOENT) { + return; + } + ereport(ERROR, (errmsg("open directory %s: %s", log_path, TRANSLATE_ERRNO))); + } + + return; +} static void CheckExtremeRtoGUCConflicts(void) { diff --git a/src/gausskernel/process/postmaster/syslogger.cpp b/src/gausskernel/process/postmaster/syslogger.cpp index 3730c8ffcf5e6a3756b614eb8d9c90672ee33db6..56fc51f6c69d72996ec896bf95254611f8970443 100644 --- a/src/gausskernel/process/postmaster/syslogger.cpp +++ b/src/gausskernel/process/postmaster/syslogger.cpp @@ -1174,16 +1174,16 @@ static FILE* logfile_open(const char* filename, const char* mode, bool allow_err ereport(LOG, (errcode_for_file_access(), errmsg("could not open log file \"%s\": %m", filename))); errno = save_errno; } else { + t_thrd.int_cxt.ImmediateInterruptOK = false; + fflush(stdout); + fflush(stderr); + /* * If open file failed, we can not write any log to file, make the * system crash is safe. */ - ereport(WARNING, (errcode_for_file_access(), errmsg("failed to open log file \"%s\": %m", filename))); - - t_thrd.int_cxt.ImmediateInterruptOK = false; - fflush(stdout); - fflush(stderr); - abort(); + ereport(FATAL, (errcode_for_file_access(), errmsg("Failed to open log file \"%s\": %m, " + "Please check the file or permissions.", filename))); } } diff --git a/src/gausskernel/storage/lmgr/proc.cpp b/src/gausskernel/storage/lmgr/proc.cpp index fa3a79d73d739c12e133a81a3eb219b637af0631..d3e10a904ad74851a6fdfdeaca87092713469612 100755 --- a/src/gausskernel/storage/lmgr/proc.cpp +++ b/src/gausskernel/storage/lmgr/proc.cpp @@ -1902,6 +1902,10 @@ static int ProcCheckMyWaitStatus(LOCALLOCK* locallock, int waitSec, bool *allowA t_thrd.proc_cxt.MyProcPid, modename, buf.data, msecs, usecs))); } } + + t_thrd.int_cxt.InterruptHoldoffCount++; + LockErrorCleanup(); + t_thrd.int_cxt.InterruptHoldoffCount--; /* ereport when we reach lock wait timeout to avoid distributed deadlock. */ if (t_thrd.storage_cxt.deadlock_state == DS_LOCK_TIMEOUT) {