From 71590d03027bf529422f2b5ae18c39681ad07d62 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Fri, 27 Nov 2020 01:20:38 +0100
Subject: [PATCH] fix problem with cached deleted entities

---
 .../java/org/caosdb/server/jobs/core/EntityStateJob.java    | 4 ++++
 .../org/caosdb/server/jobs/core/InitEntityStateJobs.java    | 6 +++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/caosdb/server/jobs/core/EntityStateJob.java b/src/main/java/org/caosdb/server/jobs/core/EntityStateJob.java
index 7a7056eb..f0696dec 100644
--- a/src/main/java/org/caosdb/server/jobs/core/EntityStateJob.java
+++ b/src/main/java/org/caosdb/server/jobs/core/EntityStateJob.java
@@ -45,6 +45,7 @@ import org.caosdb.server.datatype.ReferenceDatatype2;
 import org.caosdb.server.datatype.ReferenceValue;
 import org.caosdb.server.datatype.TextDatatype;
 import org.caosdb.server.entity.ClientMessage;
+import org.caosdb.server.entity.DeleteEntity;
 import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.Message;
 import org.caosdb.server.entity.Message.MessageType;
@@ -828,6 +829,9 @@ public abstract class EntityStateJob extends EntityJob {
 
   private void putCache(String key, EntityInterface value) {
     synchronized (cache) {
+      if(value instanceof DeleteEntity) {
+        throw new RuntimeException("Delete entity in cache. This is an implementation error.");
+      }
       id_in_cache.add(value.getId());
       cache.put(key, value);
     }
diff --git a/src/main/java/org/caosdb/server/jobs/core/InitEntityStateJobs.java b/src/main/java/org/caosdb/server/jobs/core/InitEntityStateJobs.java
index c9f1c7b7..c22c0d92 100644
--- a/src/main/java/org/caosdb/server/jobs/core/InitEntityStateJobs.java
+++ b/src/main/java/org/caosdb/server/jobs/core/InitEntityStateJobs.java
@@ -40,6 +40,7 @@ import org.caosdb.server.entity.WritableEntity;
 import org.caosdb.server.entity.wrapper.Property;
 import org.caosdb.server.jobs.JobAnnotation;
 import org.caosdb.server.jobs.JobExecutionTime;
+import org.caosdb.server.transaction.Delete;
 import org.caosdb.server.transaction.WriteTransaction;
 import org.caosdb.server.utils.EntityStatus;
 import org.caosdb.server.utils.Observable;
@@ -67,8 +68,11 @@ public class InitEntityStateJobs extends EntityStateJob implements Observer {
       State newState = handleNewState();
       State oldState = handleOldState(newState);
       if (newState != null || oldState != null) {
+        if(!(getTransaction() instanceof Delete)) {
+          
+          appendJob(MakeStateProperty.class);
+        }
         appendJob(CheckStateTransition.class);
-        appendJob(MakeStateProperty.class);
         appendJob(MakeStateMessage.class);
       } else if (newState == null
           && getEntity().getRole() == Role.Record
-- 
GitLab