From: Roman Bazalevsky Date: Sat, 25 Jan 2020 07:30:10 +0000 (+0300) Subject: Разблокировка БД в случае обнаружения "зависшей" блокировки. Причина образования... X-Git-Url: https://git.rvb.name/weathermon.git/commitdiff_plain/428b776c5748cdfe60245fba4336c01b4f62064b?hp=1bcc16ab2539d2cddb7589f72487cc81ce69c171 Разблокировка БД в случае обнаружения "зависшей" блокировки. Причина образования пока непонятна - все процессы, работавшие с БД, завершились, блок не снят. --- diff --git a/bin/weathermon b/bin/weathermon index d2b5374..2c5419c 100755 --- a/bin/weathermon +++ b/bin/weathermon @@ -89,6 +89,14 @@ function printLog(str) end end +function unlock_db(file) + + print("Unlocking DB "..file) + os.execute("sqlite3 -readonly \""..file.."\" \".backup /tmp/weathermon.db\"") + os.execute("mv /tmp/weathermon.db \""..file.."\"") + +end + function submitValue(type,id,param,val) val = tonumber(val) @@ -108,18 +116,31 @@ function submitValue(type,id,param,val) local backlog_con = assert(env:connect(backlogdb)) backlog_con:execute('BEGIN TRANSACTION') backlog_con:execute(string.format("INSERT INTO queue(time_stamp,sensor_id,sensor,param,value) VALUES (datetime('now','localtime'),'%s','%s','%s',%f)",id,type,param,val)) - backlog_con:execute('COMMIT') + local n,err = backlog_con:execute('COMMIT TRANSACTION') backlog_con:close() + + if err == "LuaSQL: database is locked" then + unlock_db(backlogdb); + end + end end if logdb then + print(logdb) local log_con = assert(env:connect(logdb)) log_con:execute('BEGIN TRANSACTION') log_con:execute(string.format("INSERT INTO log(time_stamp,sensor_id,sensor,param,value) VALUES (datetime('now','localtime'),'%s','%s','%s',%f)",id,type,param,val)) - log_con:execute('COMMIT') + local n,err = log_con:execute('COMMIT TRANSACTION') log_con:close() + + print(n,err) + + if err == "LuaSQL: database is locked" then + unlock_db(logdb); + end + end end @@ -395,7 +416,7 @@ while 1 do break end - pcall(function () +-- pcall(function () printLog("Received: "..line) if startswith(line,'{') then @@ -418,6 +439,6 @@ while 1 do io.close(f) end) end - end) +-- end) end