From 1ad05902d5375be0f0ec015270171c802af30eb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com> Date: Thu, 26 Jan 2023 09:49:40 +0100 Subject: [PATCH] WIP: create jobs only for entities in paging range --- .../org/caosdb/server/jobs/TransactionStage.java | 1 + .../caosdb/server/jobs/core/ExecuteQuery.java | 12 +++++++++++- .../java/org/caosdb/server/jobs/core/Paging.java | 7 ++++--- src/main/java/org/caosdb/server/query/Query.java | 3 ++- .../caosdb/server/transaction/Transaction.java | 16 ++++++++++++++++ 5 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/caosdb/server/jobs/TransactionStage.java b/src/main/java/org/caosdb/server/jobs/TransactionStage.java index 9e15b4e5..c265fc25 100644 --- a/src/main/java/org/caosdb/server/jobs/TransactionStage.java +++ b/src/main/java/org/caosdb/server/jobs/TransactionStage.java @@ -50,6 +50,7 @@ import org.caosdb.server.utils.UndoHandler; * @author Timm Fitschen <t.fitschen@indiscale.com> */ public enum TransactionStage { + PRE_INIT, INIT, PRE_CHECK, CHECK, diff --git a/src/main/java/org/caosdb/server/jobs/core/ExecuteQuery.java b/src/main/java/org/caosdb/server/jobs/core/ExecuteQuery.java index 352a7428..20a31e3f 100644 --- a/src/main/java/org/caosdb/server/jobs/core/ExecuteQuery.java +++ b/src/main/java/org/caosdb/server/jobs/core/ExecuteQuery.java @@ -31,6 +31,8 @@ import org.caosdb.server.jobs.JobAnnotation; import org.caosdb.server.jobs.TransactionStage; import org.caosdb.server.query.Query; import org.caosdb.server.query.Query.ParsingException; +import org.caosdb.server.transaction.Retrieve; +import org.caosdb.server.utils.EntityStatus; import org.caosdb.server.utils.ServerMessages; @JobAnnotation(flag = "query", stage = TransactionStage.INIT) @@ -53,8 +55,16 @@ public class ExecuteQuery extends FlagJob { .addMessage(new Message(MessageType.Info, (MessageCode) null, e.getMessage())); } getContainer().addMessage(queryInstance); + int index1 = getTransaction().getPagingIndex1(); + int index2 = getTransaction().getPagingIndex2(); + int ii = 0; for (final EntityInterface entity : getContainer()) { - getTransaction().getSchedule().addAll(loadJobs(entity, getTransaction())); + if (!(getTransaction() instanceof Retrieve) || (ii >= index1 && ii < index2)) { + getTransaction().getSchedule().addAll(loadJobs(entity, getTransaction())); + } else { + entity.setEntityStatus(EntityStatus.IGNORE); + } + ii++; } } } diff --git a/src/main/java/org/caosdb/server/jobs/core/Paging.java b/src/main/java/org/caosdb/server/jobs/core/Paging.java index 5f2a6ed6..ce499a5b 100644 --- a/src/main/java/org/caosdb/server/jobs/core/Paging.java +++ b/src/main/java/org/caosdb/server/jobs/core/Paging.java @@ -24,14 +24,12 @@ package org.caosdb.server.jobs.core; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.jobs.FlagJob; import org.caosdb.server.jobs.JobAnnotation; import org.caosdb.server.jobs.TransactionStage; import org.caosdb.server.transaction.Retrieve; -import org.caosdb.server.utils.EntityStatus; -@JobAnnotation(flag = "P", stage = TransactionStage.PRE_TRANSACTION) +@JobAnnotation(flag = "P", stage = TransactionStage.PRE_INIT) public class Paging extends FlagJob { public static final int DEFAULT_LENGTH = 100; @@ -53,6 +51,8 @@ public class Paging extends FlagJob { index2 = index1 + Integer.parseInt(m.group(2)); } } + getTransaction().setPagingIndices(index1, index2); + /* int i = 0; for (final EntityInterface e : getContainer()) { if (i >= index2 || i < index1) { @@ -61,6 +61,7 @@ public class Paging extends FlagJob { } i++; } + */ } } } diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java index 88da39bc..cf71903e 100644 --- a/src/main/java/org/caosdb/server/query/Query.java +++ b/src/main/java/org/caosdb/server/query/Query.java @@ -858,7 +858,8 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac /** * Filter out all entities which may not be retrieved by this user due to a missing RETRIEVE - * permission. This function is also designed for filtering of intermediate results. + * permission. This function is also designed for filtering of intermediate results + * TODO describe intermediate results. * * @param tabname * @throws SQLException diff --git a/src/main/java/org/caosdb/server/transaction/Transaction.java b/src/main/java/org/caosdb/server/transaction/Transaction.java index b4d63fbb..2b616e99 100644 --- a/src/main/java/org/caosdb/server/transaction/Transaction.java +++ b/src/main/java/org/caosdb/server/transaction/Transaction.java @@ -60,6 +60,8 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra public static final String CLEAN_UP = "TransactionCleanUp"; private final C container; + private int pagingIndex1; + private int pagingIndex2; private Access access = null; private final Schedule schedule = new Schedule(); @@ -82,6 +84,19 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra return this.container; } + public void setPagingIndices(int index1, int index2) { + pagingIndex1 = index1; + pagingIndex2 = index2; + } + + public int getPagingIndex1() { + return pagingIndex1; + } + + public int getPagingIndex2() { + return pagingIndex2; + } + /** * Implementation note: Not called in this class, but may be used by subclasses. * @@ -155,6 +170,7 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra long t1 = System.currentTimeMillis(); try { init(); + this.schedule.runJobs(TransactionStage.PRE_INIT); this.schedule.runJobs(TransactionStage.INIT); getContainer() .getTransactionBenchmark() -- GitLab