From 1b938aeadcb42d5bc7ab458bef9e1f9a6a09c5cb Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Fri, 10 Jan 2020 12:56:15 +0100
Subject: [PATCH] FIX: uncaught EntityDoesNotExist exceptions

---
 .../UnixFileSystemGetFileIterator.java        |  6 +--
 .../server/jobs/core/InsertFilesInDir.java    | 48 ++++++++++---------
 .../FileStorageConsistencyCheck.java          | 48 ++++++++++---------
 3 files changed, 53 insertions(+), 49 deletions(-)

diff --git a/src/main/java/caosdb/server/database/backend/implementation/UnixFileSystem/UnixFileSystemGetFileIterator.java b/src/main/java/caosdb/server/database/backend/implementation/UnixFileSystem/UnixFileSystemGetFileIterator.java
index 5bd6cd56..78fcac09 100644
--- a/src/main/java/caosdb/server/database/backend/implementation/UnixFileSystem/UnixFileSystemGetFileIterator.java
+++ b/src/main/java/caosdb/server/database/backend/implementation/UnixFileSystem/UnixFileSystemGetFileIterator.java
@@ -22,14 +22,14 @@
  */
 package caosdb.server.database.backend.implementation.UnixFileSystem;
 
+import java.io.File;
+import java.util.Arrays;
+import java.util.Iterator;
 import caosdb.server.FileSystem;
 import caosdb.server.database.access.Access;
 import caosdb.server.database.backend.interfaces.GetFileIteratorImpl;
 import caosdb.server.database.exceptions.TransactionException;
 import caosdb.server.entity.Message;
-import java.io.File;
-import java.util.Arrays;
-import java.util.Iterator;
 
 public class UnixFileSystemGetFileIterator extends UnixFileSystemTransaction
     implements GetFileIteratorImpl {
diff --git a/src/main/java/caosdb/server/jobs/core/InsertFilesInDir.java b/src/main/java/caosdb/server/jobs/core/InsertFilesInDir.java
index ea8836e6..7e0517b0 100644
--- a/src/main/java/caosdb/server/jobs/core/InsertFilesInDir.java
+++ b/src/main/java/caosdb/server/jobs/core/InsertFilesInDir.java
@@ -22,6 +22,12 @@
  */
 package caosdb.server.jobs.core;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import caosdb.server.CaosDBException;
 import caosdb.server.CaosDBServer;
 import caosdb.server.FileSystem;
@@ -42,12 +48,6 @@ import caosdb.server.utils.EntityStatus;
 import caosdb.server.utils.FileUtils;
 import caosdb.server.utils.Undoable;
 import caosdb.server.utils.Utils;
-import java.io.File;
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 @JobAnnotation(
     flag = "InsertFilesInDir",
@@ -262,23 +262,25 @@ public class InsertFilesInDir extends FlagJob {
   }
 
   private boolean shouldBeProcessed(final File sub) throws IOException {
-    if (this.isNotIncluded(sub)) {
-      getContainer()
-          .addMessage(
-              new Message(
-                  MessageType.Warning,
-                  1,
-                  "Not explicitly included directory or file: " + sub.getCanonicalPath()));
-      return false;
-    }
-    if (this.isExcluded(sub)) {
-      getContainer()
-          .addMessage(
-              new Message(
-                  MessageType.Warning,
-                  2,
-                  "Explicitly excluded directory or file: " + sub.getCanonicalPath()));
-      return false;
+    if (sub.isFile()) {
+      if (this.isNotIncluded(sub)) {
+        getContainer()
+            .addMessage(
+                new Message(
+                    MessageType.Warning,
+                    1,
+                    "Not explicitly included file: " + sub.getCanonicalPath()));
+        return false;
+      }
+      if (this.isExcluded(sub)) {
+        getContainer()
+            .addMessage(
+                new Message(
+                    MessageType.Warning,
+                    2,
+                    "Explicitly excluded file: " + sub.getCanonicalPath()));
+        return false;
+      }
     }
     if (sub.isHidden()) {
       getContainer()
diff --git a/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java b/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java
index d1055b5e..8bf56a20 100644
--- a/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java
+++ b/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java
@@ -22,6 +22,13 @@
  */
 package caosdb.server.transaction;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.TimeZone;
+import org.jdom2.Element;
 import caosdb.datetime.UTCDateTime;
 import caosdb.server.database.DatabaseMonitor;
 import caosdb.server.database.access.Access;
@@ -30,17 +37,11 @@ import caosdb.server.database.backend.transaction.GetFileIterator;
 import caosdb.server.database.backend.transaction.GetFileRecordByPath;
 import caosdb.server.database.backend.transaction.RetrieveAllUncheckedFiles;
 import caosdb.server.database.backend.transaction.SetFileCheckedTimestamp;
+import caosdb.server.database.exceptions.EntityDoesNotExistException;
 import caosdb.server.database.proto.SparseEntity;
 import caosdb.server.entity.Message;
 import caosdb.server.entity.xml.ToElementable;
 import caosdb.server.utils.SHA512;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.TimeZone;
-import org.jdom2.Element;
 
 public class FileStorageConsistencyCheck extends Thread
     implements ToElementable, TransactionInterface {
@@ -81,29 +82,30 @@ public class FileStorageConsistencyCheck extends Thread
         }
 
         final String path = iterator.next();
-        // FIXME this prevents all files with ".thumbnail" from being checked.
-        if (path.contains(".thumbnail")) {
+        // this prevents all thumbnails  from being checked.
+        if (path.contains(".thumbnails/")) {
           continue;
         }
 
-        final GetFileRecordByPath t = execute(new GetFileRecordByPath(path), this.access);
-
-        if (t.getEntity() == null) {
+        try {
+          final GetFileRecordByPath t = execute(new GetFileRecordByPath(path), this.access);
+          final int result =
+              execute(
+                  new FileConsistencyCheck(
+                      path, t.getSize(), t.getHash(), t.getLastConsistencyCheck(), new SHA512()),
+                  this.access)
+              .getResult();
+          
+          if (result != FileConsistencyCheck.OK) {
+            this.results.put(path, result);
+          }
+          
+          execute(new SetFileCheckedTimestamp(t.getId(), this.ts), this.access);
+        } catch (EntityDoesNotExistException e) {
           this.results.put(path, FileConsistencyCheck.UNKNOWN_FILE);
           continue;
         }
-        final int result =
-            execute(
-                    new FileConsistencyCheck(
-                        path, t.getSize(), t.getHash(), t.getLastConsistencyCheck(), new SHA512()),
-                    this.access)
-                .getResult();
-
-        if (result != FileConsistencyCheck.OK) {
-          this.results.put(path, result);
-        }
 
-        execute(new SetFileCheckedTimestamp(t.getId(), this.ts), this.access);
       }
 
       // test all remaining file records
-- 
GitLab