]> granicus.if.org Git - vnstat/commitdiff
checkpoint wal database every 4 hours, add debug timing for daemon startup sequence
authorTeemu Toivola <git@humdi.net>
Thu, 9 May 2019 20:39:15 +0000 (23:39 +0300)
committerTeemu Toivola <git@humdi.net>
Thu, 9 May 2019 20:39:15 +0000 (23:39 +0300)
src/common.h
src/daemon.c
src/daemon.h
src/dbsql.c
src/dbsql.h
src/vnstatd.c

index c61dcc3971678d7594b46e6c4265dcd2f3367470..0b9380303b6460c2c055890ce032d1d91ef9e2a7 100644 (file)
@@ -232,6 +232,7 @@ and most can be changed later from the config file.
 #define PIDFILE "/var/run/vnstat/vnstat.pid"
 #define IS64BIT -2
 #define WALDB 0
+#define WALDBCHECKPOINTINTERVALMINS 240
 
 /* no transparency by default */
 #define TRANSBG 0
index 6c08993f6864ad9e614c705e8c16f563f58277f6..3bd9bfa11f002faeee93ac7822a1a47abcef6879 100644 (file)
@@ -265,6 +265,7 @@ void initdstate(DSTATE *s)
        s->cleanuphour = getcurrenthour();
        s->dbretrycount = 0;
        s->dcache = NULL;
+       s->prevwaldbcheckpoint = time(NULL);
 }
 
 void preparedatabases(DSTATE *s)
index a09bb332a909f1318f84df96885846febfe01ced..5a5865d0890131122663ad8a965344c1bb641359 100644 (file)
@@ -10,7 +10,7 @@ typedef struct {
        uint64_t dbifcount;
        char cfgfile[512], dirname[512];
        char user[33], group[33];
-       time_t current, prevdbupdate, prevdbsave;
+       time_t current, prevdbupdate, prevdbsave, prevwaldbcheckpoint;
        datacache *dcache;
 } DSTATE;
 
index 2d65b47c80f33bcfa0edd3aefff4af73edce5c3b..9ed9539ae228578614f07f4607f01e49fa0fd64b 100644 (file)
@@ -1053,6 +1053,15 @@ int db_iserrcodefatal(int errcode)
        }
 }
 
+void db_walcheckpoint(void)
+{
+       timeused(__func__, 1);
+       if (debug)
+               printf("wal checkpoint");
+       sqlite3_wal_checkpoint_v2(db, NULL, SQLITE_CHECKPOINT_TRUNCATE, NULL, NULL);
+       timeused(__func__, 0);
+}
+
 int dbiflistadd(dbiflist **dbifl, const char *iface)
 {
        dbiflist *newif;
index 67455aaae5d08b5bbfa1bd9c098595f100960769..7f1142da4d265843f31df7b391147ad513589183 100644 (file)
@@ -68,6 +68,7 @@ int db_begintransaction(void);
 int db_committransaction(void);
 int db_rollbacktransaction(void);
 int db_iserrcodefatal(int errcode);
+void db_walcheckpoint(void);
 
 int dbiflistadd(dbiflist **dbifl, const char *iface);
 void dbiflistfree(dbiflist **dbifl);
index f7a0dcc401cc43ff6bf1c209440d423555bef495..edbf8fe60cc769c7c259462f28d71f0210c29b11 100644 (file)
@@ -54,6 +54,8 @@ int main(int argc, char *argv[])
                }
        }
 
+       timeused("daemon_startup", 1);
+
        /* load config if available */
        if (!loadcfg(s.cfgfile)) {
                return 1;
@@ -190,6 +192,7 @@ int main(int argc, char *argv[])
                }
        }
 
+       timeused("daemon_startup", 0);
        s.running = 1;
 
 #if defined(__linux__)
@@ -258,6 +261,11 @@ int main(int argc, char *argv[])
 
                                processdatacache(&s);
 
+                               if (cfg.waldb && (s.current - s.prevwaldbcheckpoint) >= WALDBCHECKPOINTINTERVALMINS * 60) {
+                                       db_walcheckpoint();
+                                       s.prevwaldbcheckpoint = s.current;
+                               }
+
                                if (debug) {
                                        printf("\n");
                                }