aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query-viatra
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-08-19 14:39:39 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-08-19 14:39:39 +0200
commitb7a46b805bd7fbb3b21a48a035698ab11fadcb7c (patch)
treeab8787dd0699cfb5a0fa1084719a0375e5b0c85b /subprojects/store-query-viatra
parentrefactor: move ITC algorithms (diff)
downloadrefinery-b7a46b805bd7fbb3b21a48a035698ab11fadcb7c.tar.gz
refinery-b7a46b805bd7fbb3b21a48a035698ab11fadcb7c.tar.zst
refinery-b7a46b805bd7fbb3b21a48a035698ab11fadcb7c.zip
feat: interruptible VIATRA engine
Reduce server load by introducing a timeout for semantics analysis.
Diffstat (limited to 'subprojects/store-query-viatra')
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryBuilder.java9
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryAdapterImpl.java5
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java10
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryStoreAdapterImpl.java9
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java9
5 files changed, 37 insertions, 5 deletions
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryBuilder.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryBuilder.java
index d31325f1..6b3be115 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryBuilder.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryBuilder.java
@@ -5,14 +5,15 @@
5 */ 5 */
6package tools.refinery.store.query.viatra; 6package tools.refinery.store.query.viatra;
7 7
8import tools.refinery.viatra.runtime.api.ViatraQueryEngineOptions;
9import tools.refinery.viatra.runtime.matchers.backend.IQueryBackendFactory;
10import tools.refinery.viatra.runtime.matchers.backend.QueryEvaluationHint;
11import tools.refinery.store.model.ModelStore; 8import tools.refinery.store.model.ModelStore;
12import tools.refinery.store.query.ModelQueryBuilder; 9import tools.refinery.store.query.ModelQueryBuilder;
13import tools.refinery.store.query.dnf.AnyQuery; 10import tools.refinery.store.query.dnf.AnyQuery;
14import tools.refinery.store.query.dnf.Dnf; 11import tools.refinery.store.query.dnf.Dnf;
15import tools.refinery.store.query.rewriter.DnfRewriter; 12import tools.refinery.store.query.rewriter.DnfRewriter;
13import tools.refinery.viatra.runtime.CancellationToken;
14import tools.refinery.viatra.runtime.api.ViatraQueryEngineOptions;
15import tools.refinery.viatra.runtime.matchers.backend.IQueryBackendFactory;
16import tools.refinery.viatra.runtime.matchers.backend.QueryEvaluationHint;
16 17
17import java.util.Collection; 18import java.util.Collection;
18import java.util.function.Function; 19import java.util.function.Function;
@@ -29,6 +30,8 @@ public interface ViatraModelQueryBuilder extends ModelQueryBuilder {
29 30
30 ViatraModelQueryBuilder searchBackend(IQueryBackendFactory queryBackendFactory); 31 ViatraModelQueryBuilder searchBackend(IQueryBackendFactory queryBackendFactory);
31 32
33 ViatraModelQueryBuilder cancellationToken(CancellationToken cancellationToken);
34
32 @Override 35 @Override
33 default ViatraModelQueryBuilder queries(AnyQuery... queries) { 36 default ViatraModelQueryBuilder queries(AnyQuery... queries) {
34 ModelQueryBuilder.super.queries(queries); 37 ModelQueryBuilder.super.queries(queries);
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryAdapterImpl.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryAdapterImpl.java
index f1209f69..ad754988 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryAdapterImpl.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryAdapterImpl.java
@@ -18,6 +18,7 @@ import tools.refinery.store.query.viatra.ViatraModelQueryAdapter;
18import tools.refinery.store.query.viatra.internal.matcher.FunctionalViatraMatcher; 18import tools.refinery.store.query.viatra.internal.matcher.FunctionalViatraMatcher;
19import tools.refinery.store.query.viatra.internal.matcher.RawPatternMatcher; 19import tools.refinery.store.query.viatra.internal.matcher.RawPatternMatcher;
20import tools.refinery.store.query.viatra.internal.matcher.RelationalViatraMatcher; 20import tools.refinery.store.query.viatra.internal.matcher.RelationalViatraMatcher;
21import tools.refinery.viatra.runtime.CancellationToken;
21import tools.refinery.viatra.runtime.api.AdvancedViatraQueryEngine; 22import tools.refinery.viatra.runtime.api.AdvancedViatraQueryEngine;
22import tools.refinery.viatra.runtime.api.GenericQueryGroup; 23import tools.refinery.viatra.runtime.api.GenericQueryGroup;
23import tools.refinery.viatra.runtime.api.IQuerySpecification; 24import tools.refinery.viatra.runtime.api.IQuerySpecification;
@@ -81,6 +82,10 @@ public class ViatraModelQueryAdapterImpl implements ViatraModelQueryAdapter, Mod
81 return storeAdapter; 82 return storeAdapter;
82 } 83 }
83 84
85 public CancellationToken getCancellationToken() {
86 return storeAdapter.getCancellationToken();
87 }
88
84 @Override 89 @Override
85 public <T> ResultSet<T> getResultSet(Query<T> query) { 90 public <T> ResultSet<T> getResultSet(Query<T> query) {
86 var canonicalQuery = storeAdapter.getCanonicalQuery(query); 91 var canonicalQuery = storeAdapter.getCanonicalQuery(query);
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java
index cfdc43ba..bb0630f3 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java
@@ -17,6 +17,7 @@ import tools.refinery.store.query.viatra.ViatraModelQueryBuilder;
17import tools.refinery.store.query.viatra.internal.localsearch.FlatCostFunction; 17import tools.refinery.store.query.viatra.internal.localsearch.FlatCostFunction;
18import tools.refinery.store.query.viatra.internal.matcher.RawPatternMatcher; 18import tools.refinery.store.query.viatra.internal.matcher.RawPatternMatcher;
19import tools.refinery.store.query.viatra.internal.pquery.Dnf2PQuery; 19import tools.refinery.store.query.viatra.internal.pquery.Dnf2PQuery;
20import tools.refinery.viatra.runtime.CancellationToken;
20import tools.refinery.viatra.runtime.api.IQuerySpecification; 21import tools.refinery.viatra.runtime.api.IQuerySpecification;
21import tools.refinery.viatra.runtime.api.ViatraQueryEngineOptions; 22import tools.refinery.viatra.runtime.api.ViatraQueryEngineOptions;
22import tools.refinery.viatra.runtime.localsearch.matcher.integration.LocalSearchGenericBackendFactory; 23import tools.refinery.viatra.runtime.localsearch.matcher.integration.LocalSearchGenericBackendFactory;
@@ -35,6 +36,7 @@ public class ViatraModelQueryBuilderImpl extends AbstractModelAdapterBuilder<Via
35 // Use a cost function that ignores the initial (empty) model but allows higher arity input keys. 36 // Use a cost function that ignores the initial (empty) model but allows higher arity input keys.
36 LocalSearchHintOptions.PLANNER_COST_FUNCTION, new FlatCostFunction() 37 LocalSearchHintOptions.PLANNER_COST_FUNCTION, new FlatCostFunction()
37 ), (IQueryBackendFactory) null); 38 ), (IQueryBackendFactory) null);
39 private CancellationToken cancellationToken = CancellationToken.NONE;
38 private final CompositeRewriter rewriter; 40 private final CompositeRewriter rewriter;
39 private final Dnf2PQuery dnf2PQuery = new Dnf2PQuery(); 41 private final Dnf2PQuery dnf2PQuery = new Dnf2PQuery();
40 private final Set<AnyQuery> queries = new LinkedHashSet<>(); 42 private final Set<AnyQuery> queries = new LinkedHashSet<>();
@@ -85,6 +87,12 @@ public class ViatraModelQueryBuilderImpl extends AbstractModelAdapterBuilder<Via
85 } 87 }
86 88
87 @Override 89 @Override
90 public ViatraModelQueryBuilder cancellationToken(CancellationToken cancellationToken) {
91 this.cancellationToken = cancellationToken;
92 return this;
93 }
94
95 @Override
88 public ViatraModelQueryBuilder queries(Collection<? extends AnyQuery> queries) { 96 public ViatraModelQueryBuilder queries(Collection<? extends AnyQuery> queries) {
89 checkNotConfigured(); 97 checkNotConfigured();
90 this.queries.addAll(queries); 98 this.queries.addAll(queries);
@@ -136,7 +144,7 @@ public class ViatraModelQueryBuilderImpl extends AbstractModelAdapterBuilder<Via
136 validateSymbols(store); 144 validateSymbols(store);
137 return new ViatraModelQueryStoreAdapterImpl(store, buildEngineOptions(), dnf2PQuery.getSymbolViews(), 145 return new ViatraModelQueryStoreAdapterImpl(store, buildEngineOptions(), dnf2PQuery.getSymbolViews(),
138 Collections.unmodifiableMap(canonicalQueryMap), Collections.unmodifiableMap(querySpecifications), 146 Collections.unmodifiableMap(canonicalQueryMap), Collections.unmodifiableMap(querySpecifications),
139 Collections.unmodifiableSet(vacuousQueries)); 147 Collections.unmodifiableSet(vacuousQueries), cancellationToken);
140 } 148 }
141 149
142 private ViatraQueryEngineOptions buildEngineOptions() { 150 private ViatraQueryEngineOptions buildEngineOptions() {
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryStoreAdapterImpl.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryStoreAdapterImpl.java
index 5407ad01..f32e1cc6 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryStoreAdapterImpl.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryStoreAdapterImpl.java
@@ -5,6 +5,7 @@
5 */ 5 */
6package tools.refinery.store.query.viatra.internal; 6package tools.refinery.store.query.viatra.internal;
7 7
8import tools.refinery.viatra.runtime.CancellationToken;
8import tools.refinery.viatra.runtime.api.IQuerySpecification; 9import tools.refinery.viatra.runtime.api.IQuerySpecification;
9import tools.refinery.viatra.runtime.api.ViatraQueryEngineOptions; 10import tools.refinery.viatra.runtime.api.ViatraQueryEngineOptions;
10import tools.refinery.viatra.runtime.matchers.context.IInputKey; 11import tools.refinery.viatra.runtime.matchers.context.IInputKey;
@@ -26,18 +27,20 @@ public class ViatraModelQueryStoreAdapterImpl implements ViatraModelQueryStoreAd
26 private final Map<AnyQuery, IQuerySpecification<RawPatternMatcher>> querySpecifications; 27 private final Map<AnyQuery, IQuerySpecification<RawPatternMatcher>> querySpecifications;
27 private final Set<AnyQuery> vacuousQueries; 28 private final Set<AnyQuery> vacuousQueries;
28 private final Set<AnyQuery> allQueries; 29 private final Set<AnyQuery> allQueries;
30 private final CancellationToken cancellationToken;
29 31
30 ViatraModelQueryStoreAdapterImpl(ModelStore store, ViatraQueryEngineOptions engineOptions, 32 ViatraModelQueryStoreAdapterImpl(ModelStore store, ViatraQueryEngineOptions engineOptions,
31 Map<AnySymbolView, IInputKey> inputKeys, 33 Map<AnySymbolView, IInputKey> inputKeys,
32 Map<AnyQuery, AnyQuery> canonicalQueryMap, 34 Map<AnyQuery, AnyQuery> canonicalQueryMap,
33 Map<AnyQuery, IQuerySpecification<RawPatternMatcher>> querySpecifications, 35 Map<AnyQuery, IQuerySpecification<RawPatternMatcher>> querySpecifications,
34 Set<AnyQuery> vacuousQueries) { 36 Set<AnyQuery> vacuousQueries, CancellationToken cancellationToken) {
35 this.store = store; 37 this.store = store;
36 this.engineOptions = engineOptions; 38 this.engineOptions = engineOptions;
37 this.inputKeys = inputKeys; 39 this.inputKeys = inputKeys;
38 this.canonicalQueryMap = canonicalQueryMap; 40 this.canonicalQueryMap = canonicalQueryMap;
39 this.querySpecifications = querySpecifications; 41 this.querySpecifications = querySpecifications;
40 this.vacuousQueries = vacuousQueries; 42 this.vacuousQueries = vacuousQueries;
43 this.cancellationToken = cancellationToken;
41 var mutableAllQueries = new LinkedHashSet<AnyQuery>(querySpecifications.size() + vacuousQueries.size()); 44 var mutableAllQueries = new LinkedHashSet<AnyQuery>(querySpecifications.size() + vacuousQueries.size());
42 mutableAllQueries.addAll(querySpecifications.keySet()); 45 mutableAllQueries.addAll(querySpecifications.keySet());
43 mutableAllQueries.addAll(vacuousQueries); 46 mutableAllQueries.addAll(vacuousQueries);
@@ -62,6 +65,10 @@ public class ViatraModelQueryStoreAdapterImpl implements ViatraModelQueryStoreAd
62 return allQueries; 65 return allQueries;
63 } 66 }
64 67
68 public CancellationToken getCancellationToken() {
69 return cancellationToken;
70 }
71
65 @Override 72 @Override
66 public <T> Query<T> getCanonicalQuery(Query<T> query) { 73 public <T> Query<T> getCanonicalQuery(Query<T> query) {
67 // We know that canonical forms of queries do not change output types. 74 // We know that canonical forms of queries do not change output types.
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java
index d1fa5239..dadab5dd 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java
@@ -5,6 +5,7 @@
5 */ 5 */
6package tools.refinery.store.query.viatra.internal.context; 6package tools.refinery.store.query.viatra.internal.context;
7 7
8import tools.refinery.viatra.runtime.CancellationToken;
8import tools.refinery.viatra.runtime.matchers.context.*; 9import tools.refinery.viatra.runtime.matchers.context.*;
9import tools.refinery.viatra.runtime.matchers.tuple.ITuple; 10import tools.refinery.viatra.runtime.matchers.tuple.ITuple;
10import tools.refinery.viatra.runtime.matchers.tuple.Tuple; 11import tools.refinery.viatra.runtime.matchers.tuple.Tuple;
@@ -32,10 +33,13 @@ public class RelationalRuntimeContext implements IQueryRuntimeContext {
32 33
33 private final Model model; 34 private final Model model;
34 35
36 private final CancellationToken cancellationToken;
37
35 RelationalRuntimeContext(ViatraModelQueryAdapterImpl adapter) { 38 RelationalRuntimeContext(ViatraModelQueryAdapterImpl adapter) {
36 model = adapter.getModel(); 39 model = adapter.getModel();
37 metaContext = new RelationalQueryMetaContext(adapter.getStoreAdapter().getInputKeys()); 40 metaContext = new RelationalQueryMetaContext(adapter.getStoreAdapter().getInputKeys());
38 modelUpdateListener = new ModelUpdateListener(adapter); 41 modelUpdateListener = new ModelUpdateListener(adapter);
42 cancellationToken = adapter.getCancellationToken();
39 } 43 }
40 44
41 @Override 45 @Override
@@ -192,4 +196,9 @@ public class RelationalRuntimeContext implements IQueryRuntimeContext {
192 public void executeAfterTraversal(Runnable runnable) { 196 public void executeAfterTraversal(Runnable runnable) {
193 runnable.run(); 197 runnable.run();
194 } 198 }
199
200 @Override
201 public CancellationToken getCancellationToken() {
202 return cancellationToken;
203 }
195} 204}