From 93f3d4462d2ed6fea5980c40b91a2391d1eb0488 Mon Sep 17 00:00:00 2001 From: slguan Date: Wed, 21 Aug 2019 23:57:43 +0800 Subject: [PATCH] taosd should not start while other process is running --- src/system/src/dnodeSystem.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/system/src/dnodeSystem.c b/src/system/src/dnodeSystem.c index bc08d5b3c2..675e758dc6 100644 --- a/src/system/src/dnodeSystem.c +++ b/src/system/src/dnodeSystem.c @@ -83,6 +83,17 @@ void taosCreateTierDirectory() { mkdir(fileName, 0755); } +void dnodeCheckDbRunning(const char* dir) { + char filepath[256] = {0}; + sprintf(filepath, "%s/.running", dir); + int fd = open(filepath, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU | S_IRWXG | S_IRWXO); + int ret = flock(fd, LOCK_EX | LOCK_NB); + if (ret != 0) { + dError("failed to lock file:%s ret:%d, database may be running, quit", ret, filepath); + exit(0); + } +} + int dnodeInitSystem() { char temp[128]; struct stat dirstat; @@ -115,6 +126,7 @@ int dnodeInitSystem() { sprintf(mgmtDirectory, "%s/mgmt", tsDirectory); sprintf(tsDirectory, "%s/tsdb", dataDir); + dnodeCheckDbRunning(dataDir); tsPrintGlobalConfig(); dPrint("Server IP address is:%s", tsInternalIp);