From: Roman Bazalevsky <rvb@rvb.name> Date: Thu, 23 Jan 2020 07:24:52 +0000 (+0300) Subject: Транзакционная работа с БД для избежания блокировок. X-Git-Url: https://git.rvb.name/weathermon.git/commitdiff_plain/21260a74f42a65603317d1938fac675d5eef6635?ds=sidebyside;hp=--cc Транзакционная работа с БД для избежания блокировок. --- 21260a74f42a65603317d1938fac675d5eef6635 diff --git a/bin/dump-yesterday b/bin/dump-yesterday index d96d3dd..c9e1eaf 100755 --- a/bin/dump-yesterday +++ b/bin/dump-yesterday @@ -12,6 +12,6 @@ if [ -f "$logdb" ]; then /usr/bin/weather-filter $logdb dump-compacted $yesterday $dumpdir - sqlite3 $logdb "delete from log where time_stamp<date('now','-1 day')" + sqlite3 $logdb "delete from log where time_stamp<date('now','-2 day')" fi diff --git a/bin/weather-backup b/bin/weather-backup index fd219f7..7f8009b 100755 --- a/bin/weather-backup +++ b/bin/weather-backup @@ -6,10 +6,10 @@ LOGDB=`uci get weathermon.process.logdb` if [ ! -z "$BACKLOGDB" ]; then BACKLOG_BASE=$(basename "$BACKLOGDB") - sqlite3 "$BACKLOGDB" ".backup $BACKUP_DIR/$BACKLOG_BASE" + sqlite3 -readonly "$BACKLOGDB" ".backup $BACKUP_DIR/$BACKLOG_BASE" fi if [ ! -z "$LOGDB" ]; then LOG_BASE=$(basename "$LOGDB") - sqlite3 "$LOGDB" ".backup $BACKUP_DIR/$LOG_BASE" + sqlite3 -readonly "$LOGDB" ".backup $BACKUP_DIR/$LOG_BASE" fi diff --git a/bin/weather-filter b/bin/weather-filter index 84c2265..3acca7b 100755 --- a/bin/weather-filter +++ b/bin/weather-filter @@ -175,7 +175,7 @@ local day = arg[3] local dbdriver = require "luasql.sqlite3" env = assert(dbdriver.sqlite3()) -con = assert(env:connect(logdb)) +con = assert(env:connect(logdb,'READONLY')) if command == "list" then diff --git a/bin/weather-watchdog b/bin/weather-watchdog index 4847477..48c4bff 100644 --- a/bin/weather-watchdog +++ b/bin/weather-watchdog @@ -4,7 +4,8 @@ stamp=`date +%s -r $(uci get weathermon.process.dump_file)` now=`date +%s` delta=$(( $now - $stamp )) if [[ $delta -ge 300 ]]; then + logger weathermon restarting... /etc/init.d/weathermon restart fi -pgrep weather-display > /dev/null || /etc/init.d/weather-display restart +pgrep weather-lcd > /dev/null || /etc/init.d/lcd-weather restart diff --git a/bin/weathermon b/bin/weathermon index bd9ca80..dbffa82 100755 --- a/bin/weathermon +++ b/bin/weathermon @@ -105,13 +105,17 @@ function submitValue(type,id,param,val) if code ~= 200 and backlog_con then printLog("writing record to backlog...") + 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') end end if logdb then + 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') end end @@ -408,7 +412,6 @@ while 1 do io.close(f) end) end - end) end