From 209c7c0c8acbe183e3630cd92940f6b5269a16a7 Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Tue, 24 Nov 2020 16:25:54 +0100 Subject: [PATCH] WIP version history --- conf/core/cache.ccf | 4 ++-- .../transaction/InsertSparseEntity.java | 1 + .../RetrieveTransactionHistory.java | 2 ++ .../transaction/RetrieveVersionInfo.java | 1 + .../org/caosdb/server/entity/Version.java | 18 +++++++++++++++++ .../entity/xml/VersionXMLSerializer.java | 6 ++++++ .../java/org/caosdb/server/utils/Info.java | 20 ++++++++++--------- 7 files changed, 41 insertions(+), 11 deletions(-) diff --git a/conf/core/cache.ccf b/conf/core/cache.ccf index b4e1f935..ad73cb86 100644 --- a/conf/core/cache.ccf +++ b/conf/core/cache.ccf @@ -28,8 +28,8 @@ jcs.region.BACKEND_JobRules.cacheattributes.MaxObjects=103 jcs.region.BACKEND_SparseEntities jcs.region.BACKEND_SparseEntities.cacheattributes.MaxObjects=1002 -jcs.region.BACKEND_RetrieveFullVersionInfo -jcs.region.BACKEND_RetrieveFullVersionInfo.cacheattributes.MaxObjects=1006 +jcs.region.BACKEND_RetrieveVersionHistory +jcs.region.BACKEND_RetrieveVersionHistory.cacheattributes.MaxObjects=1006 # PAM UserSource Caching: Cached Items expire after 60 seconds if they are not requested (idle) and after 600 seconds max. # PAM_UnixUserGroups diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java index 7e95d1c2..22720f83 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java @@ -70,5 +70,6 @@ public class InsertSparseEntity extends BackendTransaction { }); this.entity.setId(e.id); this.entity.setVersion(new Version(e.versionId)); + this.entity.getVersion().setHead(true); } } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveTransactionHistory.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveTransactionHistory.java index d013b296..28ffbf8a 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveTransactionHistory.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveTransactionHistory.java @@ -54,6 +54,8 @@ public class RetrieveTransactionHistory extends RetrieveVersionHistory { Version v = getVersion(getEntity().getVersion().getId()); v.setSuccessors(getSuccessors(v.getId(), true)); v.setPredecessors(getPredecessors(v.getId(), true)); + v.setHead(v.getSuccessors().isEmpty()); + v.setCompleteHistory(true); return v; } } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionInfo.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionInfo.java index e2218b1d..26f3f396 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionInfo.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveVersionInfo.java @@ -49,6 +49,7 @@ public class RetrieveVersionInfo extends RetrieveVersionHistory { Version v = getVersion(getEntity().getVersion().getId()); v.setPredecessors(getPredecessors(v.getId(), false)); v.setSuccessors(getSuccessors(v.getId(), false)); + v.setHead(v.getSuccessors().isEmpty()); return v; } } diff --git a/src/main/java/org/caosdb/server/entity/Version.java b/src/main/java/org/caosdb/server/entity/Version.java index 693e912e..5529c7c5 100644 --- a/src/main/java/org/caosdb/server/entity/Version.java +++ b/src/main/java/org/caosdb/server/entity/Version.java @@ -36,6 +36,8 @@ public class Version { private List<Version> predecessors = null; private List<Version> successors = null; private UTCDateTime date = null; + private boolean isHead = false; + private boolean isCompleteHistory = false; public Version(String id, long seconds, int nanos) { this(id, UTCDateTime.UTCSeconds(seconds, nanos), null, null); @@ -109,4 +111,20 @@ public class Version { public void setDate(Long timestamp) { this.date = UTCDateTime.SystemMillisToUTCDateTime(timestamp); } + + public boolean isHead() { + return isHead; + } + + public void setHead(boolean isHead) { + this.isHead = isHead; + } + + public boolean isCompleteHistory() { + return isCompleteHistory; + } + + public void setCompleteHistory(boolean isCompleteHistory) { + this.isCompleteHistory = isCompleteHistory; + } } diff --git a/src/main/java/org/caosdb/server/entity/xml/VersionXMLSerializer.java b/src/main/java/org/caosdb/server/entity/xml/VersionXMLSerializer.java index d43fe378..40d19a5f 100644 --- a/src/main/java/org/caosdb/server/entity/xml/VersionXMLSerializer.java +++ b/src/main/java/org/caosdb/server/entity/xml/VersionXMLSerializer.java @@ -62,5 +62,11 @@ class VersionXMLSerializer { if (version.getDate() != null) { element.setAttribute("date", version.getDate().toDateTimeString(TimeZone.getDefault())); } + if (version.isHead()) { + element.setAttribute("head", "true"); + } + if (version.isCompleteHistory()) { + element.setAttribute("completeHistory", "true"); + } } } diff --git a/src/main/java/org/caosdb/server/utils/Info.java b/src/main/java/org/caosdb/server/utils/Info.java index 19f792cf..3a488a1c 100644 --- a/src/main/java/org/caosdb/server/utils/Info.java +++ b/src/main/java/org/caosdb/server/utils/Info.java @@ -202,6 +202,10 @@ public class Info extends AbstractObservable implements Observer, TransactionInt } dropOffBox = new File(FileSystem.getDropOffBox()); final Element info = new Element("Stats"); + if (CaosDBServer.isDebugMode()) { + info.setAttribute("debug", "true"); + } + final Element counts = new Element("counts"); counts.setAttribute("records", Integer.toString(recordsCount)); counts.setAttribute("properties", Integer.toString(propertiesCount)); @@ -209,18 +213,16 @@ public class Info extends AbstractObservable implements Observer, TransactionInt counts.setAttribute("files", Integer.toString(filesCount)); counts.setAttribute("fssize", fssize); counts.setAttribute("tmpfiles", Integer.toString(tmpFilesCount)); - if (CaosDBServer.isDebugMode()) { - counts.setAttribute("debug", "true"); - } - final Element e = new Element("dropOffBox"); + + final Element dropOffBoxElem = new Element("dropOffBox"); if (dropOffBox.isDirectory()) { if (dropOffBox.canRead()) { if (tree) { - e.setAttribute("path", dropOffBox.getAbsolutePath()); - e.addContent(getTree(dropOffBox.listFiles())); + dropOffBoxElem.setAttribute("path", dropOffBox.getAbsolutePath()); + dropOffBoxElem.addContent(getTree(dropOffBox.listFiles())); } else { - e.setAttribute("path", dropOffBox.getAbsolutePath()); - e.addContent(getFlatList(dropOffBox.listFiles())); + dropOffBoxElem.setAttribute("path", dropOffBox.getAbsolutePath()); + dropOffBoxElem.addContent(getFlatList(dropOffBox.listFiles())); } } else { // TODO: return a message that the DropOffBox is not readable. @@ -230,7 +232,7 @@ public class Info extends AbstractObservable implements Observer, TransactionInt // present. } info.addContent(counts); - info.addContent(e); + info.addContent(dropOffBoxElem); return info; } -- GitLab