Update, only continue when at least 80 percent is successful read
authorJeroen van der Heijden <jeroen@transceptor.technology>
Thu, 23 Apr 2020 13:20:44 +0000 (15:20 +0200)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Thu, 23 Apr 2020 13:20:44 +0000 (15:20 +0200)
src/siri/db/series.c

index 8735e26da24af832dfcef32ee5a0f8c229b563b0..a4802ad30c80942c84f80ccb6eb866d04a53e3c1 100644 (file)
@@ -1602,17 +1602,32 @@ static int SERIES_load(siridb_t * siridb, imap_t * dropped)
     /* save last object, should be QP_END */
     tp = qp_next(unpacker, NULL);
 
-    /* free unpacker */
-    qp_unpacker_ff_free(unpacker);
-
     if (tp != QP_END)
     {
+        double start = (double) (unpacker->end - unpacker->source);
+        double pos = (double) (unpacker->pt - unpacker->source);
+
+        if (pos / start < 0.8)
+        {
+            log_critical(
+                    "Cannot read at least 80 percent of '%s', "
+                    "do not continue as this leads to data loss",
+                    fn);
+            /* free unpacker */
+            qp_unpacker_ff_free(unpacker);
+            return -1;
+        }
+
         log_error(
                 "Expected end of file '%s'; "
                 "Create a backup and continue", fn);
+
         (void) SERIES_keep_corrupt_series(siridb);
     }
 
+    /* free unpacker */
+    qp_unpacker_ff_free(unpacker);
+
     /*
      * In case of a siri_err we should not         return -1;
      * overwrite series because the