summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOran Agra <oran@redislabs.com>2023-04-19 09:23:47 +0300
committerGitHub <noreply@github.com>2023-04-19 09:23:47 +0300
commite5882da92bd0f39e74bf306ab34280e992956952 (patch)
tree5982a4ba9388953b4915adcde8fef4be663a45cb
parentb220e6b45015a4e06d385cb0ed30606e50968bf6 (diff)
downloadredis-e5882da92bd0f39e74bf306ab34280e992956952.tar.gz
Move startup system check to before daeomniztion and modules init (#12067)
1. it's a bad idea to print these errors and exit after daemonization (if we'll exit, the failure may not be detected) 2. it's not nice to exit (or even do the check that uses `fork`) after modules already started (could create threads, or do some changes)
-rw-r--r--src/server.c52
1 files changed, 28 insertions, 24 deletions
diff --git a/src/server.c b/src/server.c
index 9ec13ef12..e117b43b3 100644
--- a/src/server.c
+++ b/src/server.c
@@ -7176,6 +7176,34 @@ int main(int argc, char **argv) {
sdsfree(options);
}
if (server.sentinel_mode) sentinelCheckConfigFile();
+
+ /* Do system checks */
+#ifdef __linux__
+ linuxMemoryWarnings();
+ sds err_msg = NULL;
+ if (checkXenClocksource(&err_msg) < 0) {
+ serverLog(LL_WARNING, "WARNING %s", err_msg);
+ sdsfree(err_msg);
+ }
+#if defined (__arm64__)
+ int ret;
+ if ((ret = checkLinuxMadvFreeForkBug(&err_msg)) <= 0) {
+ if (ret < 0) {
+ serverLog(LL_WARNING, "WARNING %s", err_msg);
+ sdsfree(err_msg);
+ } else
+ serverLog(LL_WARNING, "Failed to test the kernel for a bug that could lead to data corruption during background save. "
+ "Your system could be affected, please report this error.");
+ if (!checkIgnoreWarning("ARM64-COW-BUG")) {
+ serverLog(LL_WARNING,"Redis will now exit to prevent data corruption. "
+ "Note that it is possible to suppress this warning by setting the following config: ignore-warnings ARM64-COW-BUG");
+ exit(1);
+ }
+ }
+#endif /* __arm64__ */
+#endif /* __linux__ */
+
+ /* Daemonize if needed */
server.supervised = redisIsSupervised(server.supervised_mode);
int background = server.daemonize && !server.supervised;
if (background) daemonize();
@@ -7217,30 +7245,6 @@ int main(int argc, char **argv) {
if (!server.sentinel_mode) {
/* Things not needed when running in Sentinel mode. */
serverLog(LL_NOTICE,"Server initialized");
- #ifdef __linux__
- linuxMemoryWarnings();
- sds err_msg = NULL;
- if (checkXenClocksource(&err_msg) < 0) {
- serverLog(LL_WARNING, "WARNING %s", err_msg);
- sdsfree(err_msg);
- }
- #if defined (__arm64__)
- int ret;
- if ((ret = checkLinuxMadvFreeForkBug(&err_msg)) <= 0) {
- if (ret < 0) {
- serverLog(LL_WARNING, "WARNING %s", err_msg);
- sdsfree(err_msg);
- } else
- serverLog(LL_WARNING, "Failed to test the kernel for a bug that could lead to data corruption during background save. "
- "Your system could be affected, please report this error.");
- if (!checkIgnoreWarning("ARM64-COW-BUG")) {
- serverLog(LL_WARNING,"Redis will now exit to prevent data corruption. "
- "Note that it is possible to suppress this warning by setting the following config: ignore-warnings ARM64-COW-BUG");
- exit(1);
- }
- }
- #endif /* __arm64__ */
- #endif /* __linux__ */
aofLoadManifestFromDisk();
loadDataFromDisk();
aofOpenIfNeededOnServerStart();